이제 구글 클라우드 플랫폼에서 가상이미지 우분투/데비안 내부에다
Postfix/Exim/qmail 같은 MTA 를 설치해서 메일을 보내고 받는거 _둘_다 실험이 가능합니다.
위의 문서 내용을 정확히 이해하고 소화하기가 쉽지 않습니다… 매우 빡셉니다. 하지만 그 누군가에겐 필요한 정보라 생각되어 여기에 링크 남깁니다.
참고로 보내는건 메일건/메일젯/센드그리드 같은 외부 서비스에 붙여서 2525 포트로 쏘아야 바깥 세상으로 메일을 보낼 수 있습니다.
보내는 것. 좀 더 상세한 도움문서 링크 남깁니다.
*** 엄청 빡셉니다 이해하려면 머리 터져나갑니다 ***
구글 클라우드 플랫폼에서 우분투/데비안 내부에 MTA qmail/Exim/Postfix 등을 설치했다는 가정하에 필요한 정보입니다.
발신을 어떤 경로로 해야 하는가에 대한 방법입니다.
구글앱스 무료판을 아직 쓰시는 분에게 희소식이 있습니다. 늘 사용하시던 smtp.gmail.com 을 쓸 수 있습니다.
아래의 참고문헌 [1] 이 도움이 됩니다. 구글앱스 무료판 사용자로써, 저도 직접 테스트 [2] 해봤습니다.
이로써 매달 계정당 미화 5달라를 지출하지 않아도 됩니다. ^구글앱스에 감사하고 또 감사드립니다_^))//
오픈소스 프로젝트에서 헌신적인 카르마가 가득찰때에
해당 프로젝트에선 그/그녀에게 소중한 계정을 선사합니다.
그럼 ssh 로 프로젝트 서버(예: people.freebsd.org)에 접속하여,
~/.forward 파일을 만들어 그곳에 실제 자신의 최종메일박스의 전자메일 주소를 기재합니다.
예 그런점을 역할모델로 해서 구글 클라우드 MTA 를 구성했습니다.
수신되는 모든 메일들을 포워드(forward)하기에 클라우드엔 메일관련 데이타가 쌓이지 않습니다.
이로써 무료로 계속 구글 클라우드를 쓸 수 있어서 좋구요.
포워드 동작이 정말 어렵습니다. 아웃본드(외부로 향하는) 포트 25번이 막혀있는 까닭입니다.
이건 사용자가 열지 못합니다. 구글의 정책입니다.
그래서 바깥에 있는 무료 중계호스트에 태워서 메일을 포워드 시킬수 밖에 없습니다.
거의 대부분의 아웃본드 서비스는 AUTH(인증)을 통해서만 중계(Relay)를 해주기에…
그걸 자연스럽게 처리하기위하야… 약간 닭질(헤더 재작성[1])이 필요했습니다.
닭질통해 깨달은건
돈이 있으면 그냥 지-수트(구: 구글앱스) 쓰는게 훨씬 안정적이며 정신건강상 좋다는거…^^^
그리고 나서 postfix 를 멈춘후에 loop 장애 처리를 합니다.
postqueue 와 postsuper 두 명령어가 유용합니다.
아래 명령어는 postfix 가 멈춘후에도 작동합니다. **sudo postqueue -p**' 큐 현황을 출력해줍니다. sudo postsuper -d ALL’ 모든 큐를 삭제합니다.
기타 등등 매뉴얼 페이지를 참조하면 세상이 조용해집니다^^^
포워드 메일만 처리하지만 그래도 명색이 메일서버인지라…
RFC2142 에 따라 시스템이 기본적으로 갖추어야 할 몇몇 mailbox 들을 정리했습니다.
~root/.forward 파일에 받고싶은 전자메일주소를 적어도 괜찮습니다.
개인적으로 postmaster 쪽으로 가는 메일들은 그냥 ssh 로 로그인해서 시스템 내부에서
mail 명령어로 읽습니다. 때론 `sudo cat ~root/Mailbox’ 라는 무식한 명령어를 쓸때도 있고요,
뭐하는 물건인지는 Amazon SES 를 쓰는 사람들중에서 Amazon SES 를 MX 로 설정하신분들중에서 Work 메일 대신 Foward 통해서
도착하는 모든 메일들을 Gmail 로 넘기어서 메일을 쓰시는 분들중에서 람다기능을 NodeJS 대신 파이썬으로 구현된것을 찾는분들에게 필요한 자료입니다.
저 자료를 필요로 하는 분은 아마도 대한민국 인구의 0.00000000000000000000000000001% [**]
에 수렴할거라 생각합니다…
파이썬을 쓰는분은 많아도 전자메일을 쓰는분들중 개인도메인으로 Amazon SES 와 연동하시는분은 거의 없는 까닭입니다.
하여간 AWS 람다기능 언어중 하나인 NodeJS 8.10 의 EOL 이 올해 12월 31일자로 종료되니깐 알아서 하라는
AWS 의 친절 알람메일이 도착해서 이참에 대체제를 찾아봤더니 파이썬으로 구현된것이 있더라구요…
실험해보고서 다시 감상문 남길께요;;;
갱신: Amazon SES 파이썬3 람다 실험 실패했씁니다. 제 역량 부족입니다. 정말 어렵습니다… [10월 19일 저녁 9시경] 갱신: Amazon SES 람다 실험 파이썬 2.7 판으로 재시도해서 겨우 성공했습니다 [10월 21일 밤 10시경]
(skylander86님의 코드를 조금 고쳐서 AWS 에 올려서 성공했습니다 아래에 diff 첨부했습니다)
--- lambda-ses-forwarder.py 2019-10-21 23:07:38.567542832 +0900
+++ lambda_function.py 2019-10-21 23:21:54.443542883 +0900
@@ -12,12 +12,12 @@
from botocore.exceptions import ClientError
FORWARD_MAPPING = {
- 'source@example.com': ['email1@gmail.com', 'email2@gmail.com'],
+ 'soyeomul@bullseye.yw.doraji.xyz': ['soyeomul+bullseye@doraji.xyz', 'soyeomul@gmail.com'],
}
-VERIFIED_FROM_EMAIL = os.environ.get('VERIFIED_FROM_EMAIL', 'noreply@example.com') # An email that is verified by SES to use as From address.
+VERIFIED_FROM_EMAIL = os.environ.get('VERIFIED_FROM_EMAIL', 'soyeomul@bullseye.yw.doraji.xyz') # An email that is verified by SES to use as From address.
-SES_INCOMING_BUCKET = os.environ['SES_INCOMING_BUCKET'] # S3 bucket where SES stores incoming emails.
+SES_INCOMING_BUCKET = 'mbox-bullseye-2019030203' # S3 bucket where SES stores incoming emails.
s3 = boto3.client('s3')
ses = boto3.client('ses')
@@ -25,8 +25,7 @@
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
-
-def handle(event, context):
+def lambda_handler(event, context):
record = event['Records'][0]
assert record['eventSource'] == 'aws:ses'
(아 여기에 이 댓글이 올수 있는게 구글클라우드플랫폼에 설치된 Postifx와 Amazon SES 랑 전 연동하고 있거등요,)
(쉽게쉽게 가도 될텐데 왜 이리 어려운길을 가는가에 대하여… Gmane – 오픈소스 플젝 메일링리스트들의 NNTP 서비스 – 재건을 위한 공부를 하고있거등요,)
본 글타래는 여기서 마무리 짓습니다.
구글 클라우드 플랫폼 (구글 콤푸타 엔진)이든 AWS 든 VM 을 하나 생성해두었으면 모든걸 알림메일로 자동화시켜두었더라도…
매일은 못해도 일주일에 한번씩은 반드시 ssh 로 접속을 해서 VM 상황을 한번씩 점검하심을 강력추천드립니다.
VM 은 살아서 움직이는 생명처럼 다루어야 합니다. 한번씩 [보안 판올림하세요]하는 메시지가 접속하면 첫 화면(MOTD)에 뜹니다.
우분투 VM 같은 경우엔… apt-get update 그리고 apt-get upgrade 정도만 알아도 꾸준히 VM 을 유지-보수 할 수 있을거라 생각하네요.