从 Python 发送电子邮件时是否可以仅显示发件人姓名?

Is it possible to show only sender name when sending email from Python?

提问人:Alex T 提问时间:11/13/2023 最后编辑:tripleeeAlex T 更新时间:11/13/2023 访问量:55

问:

我正在尝试使用 Python 和 .是否可以设置邮件正文的格式,使其仅显示发件人的姓名,而不是姓名和电子邮件?smptlib

目前,我正在编写这样的电子邮件

from email.utils import formataddr
from email.message import EmailMessage

msg = EmailMessage()
msg['From'] = formataddr((str(Header('John Smith', 'utf-8')), '[email protected]'))
msg['To'] = "[email protected]"
msg['Subject'] = 'title'
msg.set_content('content message')

在收件箱中,它将按预期仅显示名称(),但是当我打开邮件时,它会在尖括号中显示名称和电子邮件:John SmithJohn Smith <[email protected]>

是否可以在电子邮件中只显示 John Smith 的名字而不显示电子邮件?我仍然希望以某种方式保留电子邮件,以便在Outlook中将鼠标悬停在该电子邮件上时,该名称与该电子邮件正确关联。如果我只像这样发送姓名,则该姓名将灰显,并且不会包含Outlook中通讯簿中该人的任何详细信息。msg['From'] = 'John Smith'

python 电子邮件 smtplib

评论

0赞 tripleee 11/13/2023
正文不包含此信息。如果你的意思是在标题中,那么不,你不能隐藏收件人的地址(尽管会完全隐藏收件人信息)。Bcc:
0赞 tripleee 11/13/2023
许多使用 SMTP 可以做的事情在 Outlook 中是不可能的。如果您没有特别需要 Outlook 解决方案,请将其从问题中删除。

答:

1赞 tripleee 11/13/2023 #1

不可以,RFC5322不允许您插入不包含电子邮件地址的标题。From:

如果您提交格式错误的邮件,某些邮件服务器会悄悄地忽略该问题。例如,如果省略

msg['From'] = formataddr((str(Header('John Smith', 'utf-8')), '[email protected]'))` 

从您的代码(或插入仅带有名称的标头,如您建议的那样),您发送的消息可能会被拒绝,或者可能在没有标头的情况下传递,或者可能使用或多或少是突然合成的标头传递的。From:From:

作为一般的预防措施,许多垃圾邮件过滤器对此类格式错误的邮件采取硬性例外,因此您最终可能会遇到最终结果不如原始问题的情况。

当然,隐藏电子邮件地址也会阻止它与发件人的身份相关联;即,收件人无法将邮件连接到通讯簿条目或以前的通信。

无论如何,这听起来像是一个 XY 问题。如果您不想泄露您的个人电子邮件地址,请在 Gmail、Proton、Mailinator 或其他数百个电子邮件地址中注册一个新地址。

1赞 Serge Ballesta 11/13/2023 #2

正如您已经被告知的那样,您应该始终发送语法正确的消息,因此标头(如果存在)应包含语法正确的地址。这意味着至少要有一个邮件地址和一个全名(可选),但该地址不是必需的。如果将标头的格式设置为:From:

From: "John Smith" [email protected]

这将是一个完全有效的标头。

简单地说,这可能会在任何反恶意软件系统上引发许多危险信号,并且邮件有被扔进垃圾箱的风险......

评论

0赞 tripleee 11/13/2023
实际上它需要在 周围有尖括号。如果您不拥有该域名,您的行为可能会对无关的第三方产生不良后果(但您可以使用它来防止此类事故)。<[email protected]>dummy.com<[email protected]>
0赞 Dmitry Streblechenko 11/13/2023 #3

这就是 Outlook 的工作方式 - 它始终将发件人信息分析为名称和地址(它们存储在单独的 MAPI 属性中),但在 UI 中,它可以自由地显示两者的组合或仅显示名称。

评论

1赞 tripleee 11/14/2023
OP 正在询问 SMTP,因此在 Outlook 发育迟缓的小头脑中,它究竟会转化为什么,这是次要问题。
0赞 Dmitry Streblechenko 11/14/2023
OP 想要在 Outlook 中实现特定行为,只是他认为可以在通过 SMTP 发送的代码中实现。该行为完全不是特定于 SMTP 的。这是一个 Outlook 最终用户问题。
0赞 Alex T 11/14/2023
但是,为什么当邮件直接从我的帐户发送时,它会在括号中没有电子邮件地址(只有名称)显示,但是当使用脚本通过 smtp 发送时,它会像那样显示?
0赞 Dmitry Streblechenko 11/14/2023
如果您的邮箱由 Exchange 托管,则您的地址类型(一个看起来很丑陋的长字符串),而不是 .使用 OutlookSpy 查看邮件(单击“IMessage”按钮)。EXSMTP