2010-11-14 2 views
1

Что я пытаюсь сделать, так это настроить почтовый сервер почты с lamson (lamsonproject.org). Он работает очень хорошо, но у меня проблема с настройкой пути возврата, и по этой причине отскоки идут с адреса «От» и, следовательно, не доходят до моего почтового сервера.Отправка почты с помощью python - как установить Return-Path, который отличается от адреса «From»

Lamson использует питоны smtplib для отправки писем.

«разговор» между моим проектом, и мой SMTP-сервер выходит так:

send: 'ehlo xxx.mydomiain.com\r\n' 
reply: '250-smtp.smtpserver.com\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-SIZE 20000000\r\n' 
reply: '250-VRFY\r\n' 
reply: '250-ETRN\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250-XVERP\r\n' 
reply: '250 8BITMIME\r\n' 
reply: retcode (250); Msg: smtp.smtpserver.com 
PIPELINING 
SIZE 20000000 
VRFY 
ETRN 
STARTTLS 
XVERP 
8BITMIME 
send: u'mail FROM:<[email protected]> size=352\r\n' 
reply: '250 Ok\r\n' 
reply: retcode (250); Msg: Ok 
send: u'rcpt TO:<[email protected]>\r\n' 
reply: '250 Ok\r\n' 
reply: retcode (250); Msg: Ok 
send: 'data\r\n' 
reply: '354 End data with <CR><LF>.<CR><LF>\r\n' 
reply: retcode (354); Msg: End data with <CR><LF>.<CR><LF> 
data: (354, 'End data with <CR><LF>.<CR><LF>') 
send: 'MIME-Version: 1.0\r\nTo: [email protected]\r\nSubject: Testing bounces\r\nSender: [email protected]\r\nReturn-Path: [email protected]\r\nReply-To: [email protected]\r\nMessage-Id: 377b8dcdf661810d3dc73a4a01fe23b3\r\nFrom: [email protected]\r\nContent-Type: text/plain; charset="utf-8"\r\nContent-Transfer-Encoding: base64\r\n\r\nc2RmZ2TDpGfDpGRsZsOkZ2xkZmc=\r\n.\r\n' 
reply: '250 Ok: queued as E635D157D3\r\n' 
reply: retcode (250); Msg: Ok: queued as E635D157D3 
data: (250, 'Ok: queued as E635D157D3') 
send: 'quit\r\n' 
reply: '221 Bye\r\n' 
reply: retcode (221); Msg: Bye 
Done 

так что я могу видеть, что Return-Path действительно в заголовках.

В поисках ответа я нашел это: Setting Return-Path with Python sendmail for a MIME message

Последний комментарий в ответ: Ошибки/отскоков/и т.д.. должен перейти к отправителю конверта, а не по адресу From From :.

При поиске отправителя конверта и как указать, я наткнулся на этой вики статьи: http://en.wikipedia.org/wiki/Bounce_address

Это перечисляет еще возможные параметры заголовка, как: обратный путь, обратный путь, конверт из, отправителя конверта, MAIL FROM , 2821-FROM, обратный адрес, From_, Errors-to.

Я положил все это в заголовки писем и - Вуала. Это сработало.

Мой вопрос сейчас - Мне действительно нужно ВСЕГДА перечислить так много возможных вариантов пути возврата в почтовых заголовках? Настроить ли почтовые серверы один или два из этих параметров? Есть ли лучшие способы убедиться, что почта возвращается на мой почтовый сервер, когда он отскакивает?

Alan.

ответ

1

Если вы являетесь , отправьте почте, тогда вам не нужно устанавливать какие-либо из этих заголовков; правильное место для отправителя конверта в команде MAIL FROM:, так что в вашем случае:

 
MAIL FROM:<[email protected]> 

С помощью этой команды является частью протокола SMTP, а не само сообщение, то получатель почтовый сервер добавляет возврат- Заголовок пути в интересах фильтров или другой последующей обработки, где исходный конверт SMTP недоступен. См RFC2821:

Когда сервер SMTP обеспечивает «окончательную доставку» сообщения, он вставляет обратный путь строку в начале почты данных. Это использование обратного пути требуется; почтовые системы ДОЛЖНЫ поддерживать . Линия обратного пути сохраняет информацию в обратном пути < > из команды MAIL.

+0

После этого длинного дня расследования этого, мой мозг несколько обжарен. Позвольте мне понять это, вы говорите мне, что вместо того, чтобы устанавливать эти заголовки, я должен использовать команду MAIL FROM при отправке почты. Но поскольку pythons smtplib используется для отправки почты, и поскольку этот lamson использует этот smtplib, я думаю, что я не могу повлиять, какие команды отправляются на сервер smtplib. В любом случае, без переписывания lamson. Это насколько я понимаю. Верный? –

+0

В любом случае, команда MAIL FROM отправляется на сервер - вы можете увидеть ее в моей записи в журнале. aint, что та же самая команда, к которой вы обращаетесь. Вся моя проблема возникает из-за того, что адрес MAIL FROM должен отличаться от фактического адреса, на который должны отправляться письма. –

+0

Да, это та же самая команда. Если вы передаете почту через функцию 'relay.deliver (message, to, from)' Lamson, просто измените значение 'to', так как это то, что заканчивается в команде' MAIL FROM'. – SimonJ

0

from_addr используется в функции sendmail(from_addr, to_addrs, msg, mail_options=[], rcpt_options=[]) будет один тот, который получают это установить в качестве Return-Path.

msg, который вы отправляете с помощью функции, может содержать другой заголовок From:, который является нормальным с адреса, который люди увидят при открытии электронной почты.

Вы можете увидеть это в smtplib documentation. Цитирование примечание есть:

from_addr и to_addrs параметры используются для построения конверта сообщения, используемого транспортными средствами. sendmail никак не изменяет заголовки сообщений.

Смежные вопросы