【问题标题】:How to add sender name before sender address in python email script如何在python电子邮件脚本中的发件人地址之前添加发件人姓名
【发布时间】:2018-02-16 21:05:21
【问题描述】:

这是我的代码

# 导入 smtplib 提供邮件功能 导入 smtplib # 导入邮件模块 从 email.mime.multipart 导入 MIMEMultipart 从 email.mime.text 导入 MIMEText # 定义要使用的电子邮件地址 addr_to = 'user@outlook.com' addr_from = 'user@aol.com' # 定义 SMTP 电子邮件服务器详细信息 smtp_server = 'smtp.aol.com' smtp_user = 'user@aol.com' smtp_pass = '通过' # 构建电子邮件 msg = MIMEMultipart('替代') msg['To'] = addr_to msg['From'] = addr_from msg['Subject'] = '测试测试测试!' # 创建消息正文(纯文本和 HTML 版本)。 text = "这是一条测试消息。\n文本和 html。" html = """\ """ # 记录两个部分的 MIME 类型 - text/plain 和 text/html。 第 1 部分 = MIMEText(文本,“纯文本”) 第 2 部分 = MIMEText(html, 'html') # 将部件附加到消息容器中。 # 根据 RFC 2046,多部分消息的最后一部分,在这种情况下 # HTML 消息,是最好的和首选的。 msg.attach(第 1 部分) msg.attach(第 2 部分) # 通过 SMTP 服务器发送消息 s = smtplib.SMTP(smtp_server) s.login(smtp_user,smtp_pass) s.sendmail(addr_from, addr_to, msg.as_string()) s.quit()

我只希望收到的电子邮件在发件人电子邮件地址之前显示发件人姓名,如下所示:sender_name

【问题讨论】:

  • 关于 RFC2046 的评论非常不正确。接收者选择他们喜欢看的身体部位。如果有的话,如果用户没有指定偏好,第一部分可能会优先。

标签: python email smtp


【解决方案1】:

在 2020 年和 Python 3 中,您可以这样做:

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

msg = EmailMessage()
msg['From'] = formataddr(('Example Sender Name', 'john@example.com'))
msg['To'] = formataddr(('Example Recipient Name', 'jack@example.org'))
msg.set_content('Lorem Ipsum')

with smtplib.SMTP('localhost') as s:
    s.send_message(msg)

【讨论】:

    【解决方案2】:

    我采用了内置示例并使用以下方法制作了它:

    mail_body = "the email body"
    mailing_list = ["user1@company.com"]
    msg = MIMEText(mail_body)
    
    me = 'John Cena <mail@company.com>'
    you = mailing_list
    msg['Subject'] = subject
    msg['From'] = me
    msg['To'] = mailing_list
    
    # Send the message via our own SMTP server, but don't include the
    # envelope header.
    s = smtplib.SMTP('localhost')
    s.sendmail(me, [you], msg.as_string())
    s.quit()
    

    【讨论】:

      【解决方案3】:

      我发现,如果我使用 gmail 发送电子邮件并将 From 标头设置为 sender name &lt;email@gmail.com&gt;,则电子邮件到达时会带有 From 之类的:

      发件人发件人姓名 email@gmail.com email@gmail.com。

      所以我猜至少使用 gmail 你应该像下面这样设置From 标头:

      msg['From'] = "sender name"
      

      【讨论】:

        【解决方案4】:

        这是一个老问题 - 但是,我遇到了同样的问题并提出了以下问题:

        msg['From'] = formataddr((str(Header('Someone Somewhere', 'utf-8')), 'xxxxx@gmail.com'))

        您需要导入from email.header import Headerfrom email.utils import formataddr

        这将使收件箱中仅显示发件人姓名,而没有&lt;xxxxx@gmail.com&gt;

        虽然电子邮件正文将包含完整模式:

        将发件人姓名和电子邮件放在一个字符串中 (Sender Name &lt;sender@server.com&gt;) 会使一些电子邮件客户端在收件人的收件箱中相应地显示它(与第一张图片不同,仅显示姓名)。

        【讨论】:

        • 很好的解决方案!
        【解决方案5】:

        您可以使用下面提到的代码,您只需要更改发送者和接收者的用户名和密码,它就会为您工作。

        import smtplib
        
        sender = 'xyz@gmail.com'
        receivers = ['abc@gmail.com']
        
        message = """From: sender_name <xyz@gmail.com>
        To: reciever_name <abc@gmail.com>
        Subject: sample test mail
        
        This is a test e-mail message.
        """
        
        try:
           smtpObj = smtplib.SMTP('smtp_server',port)
           smtpObj.sendmail(sender, receivers, message) 
           smtpObj.login(user,password)        
           print ("Successfully sent email")
        except:
           print ("Error: unable to send email")
        

        更多详情请访问https://www.datadivein.com/2018/03/how-to-auto-send-mail-using-python.html

        【讨论】:

        • 用硬编码的手工构建的消息代替完美的 MIME 消息并不是朝着正确方向迈出的一步。
        【解决方案6】:

        这取决于“友好名称”是基本 ASCII 还是需要特殊字符。

        基本示例:

        msg['From'] = str(Header('Magnus Eisengrim <meisen99@gmail.com>'))
        

        如果你需要使用非 US-ASCII 字符,那就比较复杂了,不过附上的文章应该会有所帮助,说的很透彻:http://blog.magiksys.net/generate-and-send-mail-with-python-tutorial

        【讨论】:

        • 那会改变接收者的名字!!
        • 更新了答案,但同样的逻辑适用于“From”标题以及“To”标题。
        猜你喜欢
        • 1970-01-01
        • 2010-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-07
        • 1970-01-01
        • 2018-02-17
        • 1970-01-01
        相关资源
        最近更新 更多