【问题标题】:Reliably force Return-Path with Python使用 Python 可靠地强制返回路径
【发布时间】:2011-05-16 17:36:18
【问题描述】:

我是一名 Python 初级人员,因此请记住这一点。在 Python 脚本中,我需要设置一个与发件人地址不同的返回路径地址。 (我使用 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()

为了能够可靠地为 Return-Path 指定不同的回复,我缺少什么功能?

【问题讨论】:

    标签: python email smtplib


    【解决方案1】:

    回复和返回路径是两种截然不同的野兽。请参阅RFC

    您可以设置回复:

    msg['reply-to'] = 'smith@acme.com'
    

    返回路径由 MTA 设置为接收退回邮件的地址。它由服务器管理员控制,因此除非您为 Google 工作,否则我认为这不受您的控制。

    大部分时间是在“回复”之后;如果您确实需要更改返回路径,则必须使用您控制下的 SMTP 服务器,并使用 google 了解如何为您正在使用的特定 MTA 执行此操作 - 许多人将拥有可以覆盖返回的用户和​​/或主机的白名单路径。

    【讨论】:

    • 哦,太好了。这就像一个口哨一样光滑。看来我需要阅读电子邮件。
    猜你喜欢
    • 1970-01-01
    • 2019-08-16
    • 2017-02-15
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多