*@example.com
내 서버에서 실행되고 다양한 작업을 수행하는 Python 스크립트를 사용하여 들어오는 모든 이메일을 관리하고 싶습니다 .
example.com
내 서버로 전달하기 위해 DNS MX 레코드를 작성했습니다 .mx.example.com MX mailforwarder.example.com mailforwarder.example.com A 1.2.3.4
postfix와 exim을 사용하여 많은 시행착오를 겪었지만 아무 효과가 없었기 때문에 모두 제거했습니다.
apt-get remove postfix
이제apt-get remove exim4
그 중 하나를 새로 설치하기 시작할 준비가 되었습니다. 일?)
*@example.com
들어오는 모든 이메일을 Python 스크립트로 전달하는 주요 단계는 무엇입니까?(포함: MTA에 서버 외부, 전체 인터넷 등의 이메일을 수락하도록 지시)
답변1
procmail
문제가 있는 것으로 간주됨작성자: Philip Guenther(이 경우 .forward
파일이나 이에 상응하는 파일이 불필요한 복잡성을 건너뛰고 프로그램에 직접 메일을 보낼 수 있으므로 거의 쓸모가 없습니다 procmail
).
요약: procmail 포트를 제거하십시오. 이 코드는 안전하지 않으며 추가 작업의 기초로 사용되어서는 안됩니다.
사람들은 내가 1990년대 후반부터 2001년까지 procmail의 업스트림 관리자였다는 것을 알 것입니다.
따라서 MTA(메일 전송 에이전트)에 따라 다른 솔루션이 권장될 수 있습니다. 또 다른 옵션은 MTA를 사용하여 로컬 파일이나 IMAP으로 전송한 다음 프로그램에서 파일이나 IMAP을 구문 분석하도록 하는 것입니다. 이것의 이점은 이메일을 계속해서 받아 어딘가에 저장할 수 있다는 것입니다. 프로그램에 버그가 있거나 실행에 실패하면 어떻게 될까요? 실시간 메일배송보다 문제가 적다..
수출입은행
아마도 Sendmail .forward
메소드를 복제하거나 Eximese에서 이를 올바르게 수행하는 방법을 알아내십시오. (Exim 문서를 파헤치려면 시간이 많이 걸릴 것 같아서 중단했습니다.)elspy
MILTER 모드에서 SMTP 검사를 수행하려면...
접미사
맙소사, 길고 복잡해 보이네요.
이메일을 보내
mailertable
도메인(및 .domain
필요한 경우 하위 도메인)의 모든 메일을 로컬 사용자에게 전달하려면 여기에 항목을 설정하십시오.jdoe
example.com local:jdoe
.example.com local:jdoe
그런 다음 .forward
해당 사용자가 필요한 코드를 실행할 수 있도록 파일을 설정합니다.
$ cat ~jdoe/.forward
"|/etc/smrsh/process"
$
이건 간단할지도 몰라
$ cat /etc/smrsh/process
#!/bin/sh
cat >> /home/jdoe/allmails
$
이메일이 stdin을 통해 들어오기 때문입니다( process
여러 인스턴스가 동시에 실행되는 경우에는 좋지 않을 수 있습니다. 아마도 실제 코드가 이러한 경쟁 조건을 처리할 수 있거나 멱등적일 수 있습니다... 맞죠?). 이 방법은 MTA가 모든 메일을 특정 사용자에게 리디렉션하도록 할 수 있다는 가정하에 Sendmail의 전달 구문을 복제하는 다른 MTA에서도 작동합니다.
이는 mailertable
지원이 활성화되고 confFORWARD_PATH
설정되어 Sendmail이 코드를 실행할 수 있도록 허용하고( smrsh(8)
그러나 일부 공급업체는 문서를 업데이트하지 않고 디렉토리를 변경할 수 있다는 점에 유의하십시오(실행이 strings /the/path/to/smrsh | fgrep /
도움이 될 수 있음)). selinux와 같은 것이 문제를 일으키지 않는다는 것을 가정합니다.
Sendmail의 또 다른 옵션은 MILTER를 사용하는 것입니다.MIME 디팡거기에서 필요한 비즈니스 로직을 수행합니다. (다양한 다른 MTA는 MILTER를 지원하거나 비슷한 기능을 가지고 있습니다.)
단순 메일 전송 프로토콜 데몬(OpenBSD)
한눈에smtpd.conf(5)
(OpenBSD 6.4 변경 사항에 맞게 업데이트됨)
action "mymda" mda "/path/to/your/command" user jdoe
match from any for domain example.com action "mymda"
답변2
이것은 매우 일반적인 질문인 것 같습니다...이 질문에 대한 답변은 이미 발견되었으며 여기에 제가 제안할 내용이 있습니다. Procmail은 지역 배송 대행업체입니다..제 생각에는무언가가 네트워크로부터 메일을 수신하여 로컬 배달이나 기타 필터링을 위해 procmail로 전달했다는 의미입니다. 이 경우 postfix가 바로 그 것입니다. 프로덕션에서 postfix를 실행한 후 이는 신뢰할 수 있는 도구이며 사용자 정의 메일 처리에 매우 유연합니다.
답변3
나는 사서함 스택에 Postfix와 Dovecot을 사용하는 것을 좋아합니다. 이러한 소프트웨어를 설치한 후 특정 주소로 전송된 메시지를 받으면 다음을 수행하여 스크립트를 실행할 수 있습니다.
디렉터리(예:
mail_processor.py
) 에 스크립트를 만듭니다/usr/lib/dovecot/sieve-execute/
.#!/usr/bin/python3 from sys import stdin with open('/var/log/mail_processor.log', 'a') as logfile: for line in stdin: print(line.rstrip(), file=logfile)
스크립트와 대상 파일에 올바른 권한이 있는지 확인하세요.
$ chmod +rx /usr/lib/dovecot/sieve-execute/mail_processor.py $ chmod 0777 /var/log/mail_processor.log
플러그인 활성화
sieve_extprograms
:다음을 사용하여 수정된
\etc\dovecot\conf.d\90-sieve.conf
플러그인 섹션:sieve_extensions = +vnd.dovecot.execute sieve_plugins = sieve_extprograms sieve_execute_bin_dir = /usr/lib/dovecot/sieve-execute
비둘기장을 다시 로드하세요:
$ service dovecot restart
시브 필터를 만듭니다(예: Roundcube에서 goto
settings
->filters
->actions
->edit filter set
).require ["vnd.dovecot.execute"]; # rule:[mail processing] if true { execute :pipe "mail_processor.py"; }
이제 이 필터를 사용하여 사서함으로 전달된 모든 메시지는 파이프라인을 통과합니다 mail_processor.py
.