Affidabile forzare Return-Path con Python
Domanda
Sono un junior Python, in modo da tenere a mente. In uno script Python, ho bisogno di impostare un indirizzo Return-Path che è diverso da quello del mittente. (Sto usando Gmail come server SMTP.)
Ho fatto un sacco di ricerca su questa domanda e ha trovato un sacco di "risposte", ma nessuna soluzione. Ho provato questo link Impostazione Return-Path con Python sendmail per un MIME messaggio ma non funziona per me a tutti. Posso cambiare la "A:". Indirizzo e-mail che il destinatario vede, ma quando si fa clic su "Rispondi", si torna all'indirizzo di posta elettronica inviare nuovamente
Questa è la funzione che sto cercando di scrivere. Funziona abbastanza bene, solo che ho bisogno di forzare un diverso Return-Path.
#!/usr/bin/python
import smtplib
import os
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders
import sap_mailserverdata as sf
def send_mail(sent_to, subject, body_text, sent_from_addr='', sent_from_name='', files=[], cc=[], bcc=[]):
"""Send emails with or without attachments."""
assert type(sent_to)==list
assert type(files)==list
assert type(cc)==list
assert type(bcc)==list
message = MIMEMultipart()
message['From'] = sent_from_addr
message['To'] = COMMASPACE.join(sent_to)
message['Date'] = formatdate(localtime=True)
message['Subject'] = subject
message['Cc'] = COMMASPACE.join(cc)
message.preamble = 'You need a MIME enabled mail reader to see this message.\n'
message.attach(MIMEText(body_text, 'html'))
for f in files:
part = MIMEBase('application', 'octet-stream')
part.set_payload(open(f, 'rb').read())
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f))
message.attach(part)
addresses = []
for x in sent_to:
addresses.append(x)
for x in cc:
addresses.append(x)
for x in bcc:
addresses.append(x)
mail_server = smtplib.SMTP(sf.server, sf.server_port)
mail_server.ehlo()
mail_server.set_debuglevel(1)
mail_server.starttls()
mail_server.login(sf.username, sf.password)
mail_server.sendmail(sent_from_addr, addresses, message.as_string())
mail_server.quit()
Che cosa mi manca con questa funzione per essere in grado di specificare in modo affidabile un diverso ReplyTo Return-Path?
Soluzione
Reply-To e percorso di ritorno sono due bestie distinte. Vedere la RFC .
È possibile impostare Reply-to con:
msg['reply-to'] = 'smith@acme.com'
Il percorso di ritorno è impostato dal MTA all'indirizzo che riceve rimbalzi. Si è controllata dall'amministratore del server, in modo meno che non si lavora per Google non credo che questo è sotto il vostro controllo.
La maggior parte del tempo si è dopo "Reply-to"; se si ha realmente bisogno di cambiare il percorso di ritorno è necessario utilizzare un server SMTP sotto il vostro controllo e Google per sapere come fare questo per il MTA specifica che si sta utilizzando - molti avranno una white list di utenti e / o host che possono eseguire l'override il ritorno percorso.