2010-11-14 11 views
1

Ce que j'essaie de faire est de configurer smail mail server avec lamson (lamsonproject.org). Cela fonctionne très bien, mais j'ai un problème avec le réglage du chemin de retour et pour cette raison, les rebonds vont à l'adresse 'De' et donc n'atteignent pas mon serveur de messagerie.Envoi de courrier avec python - comment définir Return-Path différent de l'adresse 'From'

Lamson utilise python smtplib pour envoyer des messages.

Le « parler » entre mon projet et mon serveur smtp va comme ça:

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 

que je puisse voir, que le Return-Path est bien en-têtes.

Alors que la recherche d'une réponse que je trouve ceci: Setting Return-Path with Python sendmail for a MIME message

Dernier commentaire dans la réponse est: erreurs/rebonds/etc. devrait aller à l'expéditeur d'enveloppe, pas l'adresse dans De:.

lors de la recherche expéditeur enveloppe et comment spécifier, je suis tombé sur cet article wiki: http://en.wikipedia.org/wiki/Bounce_address

Cette liste autres paramètres d'en-tête possibles comme: chemin de retour, chemin inverse, enveloppe de, expéditeur de l'enveloppe, MAIL FROM , 2821-FROM, adresse de retour, From_, Errors-to.

J'ai mis tous ceux dans les en-têtes de courrier et - Voila - Cela a fonctionné.

Ma question est maintenant - Dois-je vraiment TOUJOURS lister autant d'options possibles pour le chemin de retour dans les en-têtes de courrier? Les serveurs de messagerie ont-ils été configurés pour accepter un ou deux de ces paramètres maintenant? Y a-t-il de meilleurs moyens de s'assurer que ce courrier est renvoyé à mon serveur de messagerie, quand il rebondit?

Alan.

Répondre

1

Si vous êtes en envoyant mail alors vous n'avez pas besoin de définir l'un de ces en-têtes; le bon endroit pour l'expéditeur de l'enveloppe est dans la commande MAIL FROM:, donc dans votre cas:

 
MAIL FROM:<[email protected]> 

Étant donné que cette commande fait partie du protocole SMTP plutôt que le message lui-même, le serveur de messagerie destinataire ajoute une Retour- En-tête de chemin au profit des filtres ou autre traitement en aval où l'enveloppe SMTP d'origine n'est pas disponible. Voir RFC2821:

Lorsque le serveur SMTP de livraison fait la « livraison finale » d'un message , il insère une ligne de chemin de retour au début du courrier données. Cette utilisation du chemin de retour est requise; Les systèmes de messagerie DOIVENT prendre en charge . La ligne de chemin de retour conserve les informations dans le chemin inverse > à partir de la commande MAIL.

+0

Après cette longue journée d'enquête, mon cerveau est un peu frit. Laissez-moi comprendre: vous me dites qu'au lieu de définir ces en-têtes, je devrais utiliser la commande MAIL FROM lors de l'envoi du courrier. Mais puisque pythons smtplib est utilisé pour envoyer des messages, et puisque ce fichier utilise ce smtplib, je pense que je ne peux pas affecter, quelles commandes sont envoyées au serveur par smtplib. Sans réécrire lamson, de toute façon. C'est pour autant que je comprends. Correct? –

+0

Quoi qu'il en soit, la commande MAIL FROM est envoyée au serveur - vous pouvez le voir dans ma transcription. ce n'est pas la même commande que celle à laquelle vous faites référence. Tout mon problème vient de cette adresse MAIL FROM doit être différente de l'adresse réelle où les mails devraient aller. –

+0

Oui, c'est la même commande. Si vous relayez le mail via la fonction 'relay.deliver (message, to, from) de Lamson, changez simplement la valeur de' to', puisque c'est ce qui finit dans la commande 'MAIL FROM'. – SimonJ

0

Le from_addr que vous utilisez dans la fonction sendmail(from_addr, to_addrs, msg, mail_options=[], rcpt_options=[]) sera celui celui qui get défini comme Return-Path.

Le msg que vous envoyez avec cette fonction peut contenir un From: en-tête différent de l'adresse normale que les utilisateurs verront lorsqu'ils ouvriront le courrier électronique. Vous pouvez voir ceci dans le smtplib documentation. Citant la note là:

Les paramètres de from_addr et to_addrs sont utilisés pour construire l'enveloppe du message utilisé par les agents de transport. sendmail ne modifie en aucun cas les en-têtes des messages.