提问人:Alex T 提问时间:11/13/2023 最后编辑:tripleeeAlex T 更新时间:11/13/2023 访问量:55
从 Python 发送电子邮件时是否可以仅显示发件人姓名?
Is it possible to show only sender name when sending email from Python?
问:
我正在尝试使用 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 Smith
John Smith <[email protected]>
是否可以在电子邮件中只显示 John Smith 的名字而不显示电子邮件?我仍然希望以某种方式保留电子邮件,以便在Outlook中将鼠标悬停在该电子邮件上时,该名称与该电子邮件正确关联。如果我只像这样发送姓名,则该姓名将灰显,并且不会包含Outlook中通讯簿中该人的任何详细信息。msg['From'] = 'John Smith'
答:
不可以,RFC5322不允许您插入不包含电子邮件地址的标题。From:
如果您提交格式错误的邮件,某些邮件服务器会悄悄地忽略该问题。例如,如果省略
msg['From'] = formataddr((str(Header('John Smith', 'utf-8')), '[email protected]'))`
从您的代码(或插入仅带有名称的标头,如您建议的那样),您发送的消息可能会被拒绝,或者可能在没有标头的情况下传递,或者可能使用或多或少是突然合成的标头传递的。From:
From:
作为一般的预防措施,许多垃圾邮件过滤器对此类格式错误的邮件采取硬性例外,因此您最终可能会遇到最终结果不如原始问题的情况。
当然,隐藏电子邮件地址也会阻止它与发件人的身份相关联;即,收件人无法将邮件连接到通讯簿条目或以前的通信。
无论如何,这听起来像是一个 XY 问题。如果您不想泄露您的个人电子邮件地址,请在 Gmail、Proton、Mailinator 或其他数百个电子邮件地址中注册一个新地址。
正如您已经被告知的那样,您应该始终发送语法正确的消息,因此标头(如果存在)应包含语法正确的地址。这意味着至少要有一个邮件地址和一个全名(可选),但该地址不是必需的。如果将标头的格式设置为:From:
From: "John Smith" [email protected]
这将是一个完全有效的标头。
简单地说,这可能会在任何反恶意软件系统上引发许多危险信号,并且邮件有被扔进垃圾箱的风险......
评论
<[email protected]>
dummy.com
<[email protected]>
这就是 Outlook 的工作方式 - 它始终将发件人信息分析为名称和地址(它们存储在单独的 MAPI 属性中),但在 UI 中,它可以自由地显示两者的组合或仅显示名称。
评论
EX
SMTP
评论
Bcc: