【问题标题】:Sending email using python through postfix通过 postfix 使用 python 发送电子邮件
【发布时间】:2016-12-27 23:18:04
【问题描述】:

当我通过 postfix 发送电子邮件时,标题总是包含一个我想摆脱的额外跃点。以下是标题:

From admin@mta.emailcab.com  Sat Aug 20 18:40:58 2016
Return-Path: <admin@mta.emailcab.com>
X-Original-To: oneprovider@prosolutionmail.com
Delivered-To: oneprovider@prosolutionmail.com
Received: from mta.emailcab.com (mta.emailcab.com [52.58.223.55])
    by prosolutionmail.com (Postfix) with ESMTP id 75F5B23C0AC7
    for <oneprovider@prosolutionmail.com>; Sat, 20 Aug 2016 18:40:58 +0200 (CEST)
Authentication-Results: prosolutionmail.com; dkim=pass
    reason="2048-bit key; unprotected key"
    header.d=mta.emailcab.com header.i=@mta.emailcab.com
    header.b=mXAsVoW+; dkim-adsp=pass; dkim-atps=neutral
Received: from [127.0.0.1] (localhost [127.0.0.1])
    by mta.emailcab.com (Postfix) with ESMTP id 0585383189
    for <oneprovider@prosolutionmail.com>; Sat, 20 Aug 2016 16:40:58 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=mta.emailcab.com;
    s=key1; t=1471711258;
    bh=BUn1x+fCFHl9Q+e98U5epKcL5xZNNNU3Lq/zNz0IMnI=;
    h=Subject:From:To:Date:From;
    b=mXAsVoW+IYePOdDe1d7OyQdYpRzNoKdYclLEv/wXm3dDjJulDMfr5HM274U1ypNNs
     OCqK5TNRo4UMrFqIcU38BVjOIwN3gPOStxs3jSEmoWLXynIAuclbNew692P2KY7jkn
     oU7lhPZ1CwBln+qEKKXbyuiXtRmbA2Qp1pvLu+R9T/WfPzWiVhe+2CPq9ob3j3mwBW
     oBjLNvmbm74eenMKxv8G47FBi7HS4+9eSuUI9TVV0fb/qZwNHwumpFeTA5DPRzkQPM
     u5imAbdz5GqXxs4wo4UXTpWEb7dSkzJu7/2ebLshCnnuSoN8HV5j79GEoidyzmqEpC
     saF1XA+rJvKwg==
Content-Type: multipart/alternative; boundary="===============5118095836845773678=="
MIME-Version: 1.0
Subject: =?utf-8?b?0JrQsNC6INC00L7QsdGA0LDRgtGM0YHRjyDQtNC+INCb0YzQstC+0LLQsD8=?=
From: admin@mta.emailcab.com
To: oneprovider@prosolutionmail.com
Message-Id: <20160820164058.0585383189@mta.emailcab.com>
Date: Sat, 20 Aug 2016 16:40:58 +0000 (UTC)

如您所见,有两个“已接收”标头,一个是传出 IP,一个是本地 IP。如何发送电子邮件以便只有公共 IP 可见?

python 代码是这样的:

import smtplib

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.header import Header

smtp = smtplib.SMTP()
smtp.connect('localhost')

msgRoot = MIMEMultipart("alternative")
msgRoot['Subject'] = Header("Subject subject", "utf-8")
msgRoot['From'] = "admin@example.com"
msgRoot['To'] = "foo@bar.com"
text = MIMEText(open('template.txt', 'r').read(), "plain", "utf-8")
msgRoot.attach(text)
html = MIMEText(open('template.html', 'r').read(), "html", "utf-8")
msgRoot.attach(html)
smtp.sendmail("admin@example.com", "foo@bar.com", msgRoot.as_string())

【问题讨论】:

    标签: python email postfix


    【解决方案1】:

    它不应该在 python 中修复,我不相信它可以。 SMTP 使用“寻址信封”(To:,From:)。您引用的 Received From 值不是 python 问题,而是 Postfix 配置问题。将其想象为 TCP,您看不到封装/解封装会有所不同,但它仍然会发生。当您查看原始消息时,您会看到您的服务器与他们的服务器之间的 SMTP 通信。

    您需要查看您的 Postfix 配置。

    您的/etc/postfix/main.cf 中有一个值,您可以更改它将..应该...更改您所看到的值。

    找到:

    myhostname = ???
    

    我假设你的设置为 localhost。 您使用的是 MySQL 还是 PostgreSQL?如果你应该有一个users 和一个virtual_alias 表设置,myhostname 的值应该对应于表中的这些对象之一。

    你能发布你的 main.cf 文件吗?

    用户和你在同一台服务器上吗?

    【讨论】:

    • 我的主机名是 mail.example.com。我在想是否可以使用 python 的 sendmail 命令发送电子邮件。就像不是连接到本地 smtp,只需使用 sendmail 命令和 msgRoot.as_string() 值运行一个进程
    • sendmail 需要后缀
    • sendmail -S test test@gmail.com sendmail: 无效选项 -- 'S' sendmail: 致命: 打开 /etc/postfix/main.cf: 没有这样的文件或目录
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多