我是Python大三学生,所以请记住这一点。在Python脚本中,我需要设置一个与发件人地址不同的Return-Path地址。 (我使用Gmail作为SMTP服务器。)
我已经在这个问题上做了很多搜索,发现了很多“答案”,但没有解决方案。我尝试了这个链接Setting Return-Path with Python sendmail for a MIME message,但它根本不适合我。我可以更改电子邮件收件人看到的“收件人:”地址,但是当他们点击“回复”时,它会再次返回发送电子邮件地址。
这是我正在尝试写的功能。它运作得很好,除了我需要强制使用不同的返回路径。
#!/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()
我对此功能缺少什么能够可靠地指定不同的回复路径?
答案 0 :(得分:5)
回复和返回路径是两个不同的野兽。请参阅RFC。
您可以将回复设置为:
msg['reply-to'] = 'smith@acme.com'
返回路径由MTA设置为接收退回的地址。它由服务器管理员控制,因此除非您为Google工作,否则我认为这不在您的控制之下。
大部分时间都是在“回复”之后;如果你真的需要更改返回路径,你必须使用你控制下的SMTP服务器和谷歌如何为你正在使用的特定MTA执行此操作 - 许多人将有一个白名单的用户和/或主机可以覆盖返回路径。