postfix 从错误的域发送邮件/用于发送 utf8 邮件的 Python 3 代码

postfix 从错误的域发送邮件/用于发送 utf8 邮件的 Python 3 代码

我有一台有两个域名的机器,分别是a.com和b.com。

当我使用 postfix 从类似地址发送某些内容时[电子邮件保护],它将其替换为[电子邮件保护]每次都是这样。我的 main.cf 文件仅指定了 a.com,所以我不知道 b.com 来自哪里。

以下是相关部分邮件日志...第一行是消息的开始,然后第六行是[电子邮件保护]神秘地出现。

mymachine sendmail[28543]: qA3NGbOR028543: [email protected], size=792, class=0, nrcpts=1, msgid=<[email protected]>, relay=apache@localhost
mymachine postfix/smtpd[28546]: connect from b.com[127.0.0.1]
mymachine postfix/smtpd[28546]: 912F9758031: client=b.com[127.0.0.1]
mymachine postfix/cleanup[28549]: 912F9758031: message-id=<[email protected]>
mymachine sendmail[28543]: qA3NGbOR028543: [email protected], delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30792, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (Ok: queued as 912F9758031)
mymachine postfix/qmgr[28527]: 912F9758031: from=<[email protected]>, size=1130, nrcpt=1 (queue active)

我不确定我如何调用它是否相关,但它来自一些 PHP mail(),并且我确保传递了 -f 标志。如果任何更多信息可能有帮助,我很乐意提供它!

答案1

下列的

http://mail.python.org/pipermail/mailman-developers/2001-March/008476.html

我发现卸载 sendmail、安装 postfix 并使用 Python 脚本发送邮件更简单。这是我用来发送邮件的 Python 3 代码(需要国际化,因此使用 UTF-8 编码)。

import email.message, email.mime.text, smtplib, sys
from email.utils import parseaddr, formataddr
from email.header import Header
from email.charset import Charset

def format_address(name, email):
    if not name:
        return email
    name = Charset('iso-8859-1').header_encode(name)
    return formataddr((name, email))

def send_unicode_email(mFrom, mTo, mSubject, mBody):
    sender_name, sender_addr = parseaddr(mFrom)
    recipient_name, recipient_addr = parseaddr(mTo)

    composed = email.mime.text.MIMEText(mBody.encode('UTF-8'), _charset='UTF-8')
    composed['from'] = format_address(sender_name, sender_addr)
    composed['to'] = format_address(recipient_name, recipient_addr)
    composed['subject'] = Header(mSubject, 'UTF-8')

    srv = smtplib.SMTP('localhost')
    srv.send_message(composed)
    srv.quit()

相关内容