2011-08-22 5 views
3

특정 메시지에 'Reply-to'헤더를 추가하기 위해 postfix 용 간단한 파이썬 필터를 만들려고합니다. 내가 지금까지했던 어떤포스트 픽스 용 파이썬 필터

은과 같이 이메일 개체로 표준 입력에서 이메일을 가지고, 그것을 구문 분석하는 것입니다

raw = sys.stdin.readlines() 
msg = email.message_from_string(''.join(raw)) 
다음

나는 등 헤더

msg.add_header('Reply-to', '[email protected]') 
와 함께 연주했습니다

그리고 지금 그것을 다시 postfix에 삽입하고 싶습니다. 후위와 연관된 filter readme을 읽었을 때 나는 'sendmail'명령을 사용하여 그것을 다시 전달해야한다. 그러나, 전자 메일 개체를 sendmail에 전달하는 방법을 잘 모르겠다. 예를 들어 subprocess의 'call()'을 사용하거나 smtplib의 'smtplib.SMTP()'를 사용해야하는지?

'올바른'방법은 무엇입니까?

감사

답변

4

당신은 두 가지 방법을 사용할 수 있어야하지만, smtplib.SMTP은() 더 유연하고 쉽게 오류 처리를한다.

당신이 예를해야하는 경우, 내 framework for python filters 살펴 있습니다

: https://github.com/gryphius/fuglu/blob/master/fuglu/src/fuglu/connectors/smtpconnector.py#L67

re_inject 방법은 정확히 그 (FUSMTPClient이 smtplib.SMTP의 서브 클래스), 그래서 기본적으로는 아래로 비등 않습니다를

client = smtplib.SMTP('127.0.0.1',<yourportnumber for the receiving postfix instance>) 
client.sendmail(<envelope from>, <envelope to>, <yourmessageobject>.as_string()) 
+0

포트 25에 다시 주입하면 루프가 발생합니다 (메시지가 필터로 다시 전송 됨). 그래서 10026과 같은 다른 포트에 추가 인스턴스가 필요합니다. http://sourceforge.net/apps/trac/fuglu/wiki/FugluInstall (로컬 호스트로 시작하는 블록 : 10026 inet ...) – Gryphius

+0

Ah 답장을 보내 주셔서 감사합니다 - 지금 fuglu를 통해 읽었습니다. 내가 stdin에서 가져 가고 있어도 10026에 다시 주입 할 수 있습니까? Postfix 문서는 듣기 서비스 (Fuglu와 같은)의 맥락에서만 10026 다시 주입에 대해 이야기하는 것처럼 보입니까? – jvc26

+1

AFAIK 메시지가 필터 (stdin/smtp/....)에 어떻게 전달되는지는 중요하지 않습니다. 10026의 추가 접미사 인스턴스는 원래 메시지에 대해 아무 것도 모릅니다. 새 메시지처럼 보입니다. (새로운 큐 ID를 얻습니다.) – Gryphius