插件窝 干货文章 Python邮件发送:如何正确设置发件人姓名和邮箱地址避免显示奇怪信息?

Python邮件发送:如何正确设置发件人姓名和邮箱地址避免显示奇怪信息?

发件人 邮箱 email 邮件 953    来源:    2025-03-11

在Python中发送邮件时,正确设置发件人姓名和邮箱地址可以避免邮件客户端显示奇怪的信息。通常,邮件客户端会显示发件人的姓名和邮箱地址。如果你只设置了邮箱地址而没有设置姓名,邮件客户端可能会显示一些不友好的信息,比如只显示邮箱地址或者显示为“未知发件人”。

你可以使用Python的smtplibemail库来发送邮件,并通过email.header.Headeremail.utils.formataddr来正确设置发件人的姓名和邮箱地址。

以下是一个示例代码,展示如何正确设置发件人姓名和邮箱地址:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr

# 邮件配置
smtp_server = 'smtp.example.com'  # SMTP服务器地址
smtp_port = 587  # SMTP服务器端口
smtp_username = 'your_username@example.com'  # 发件人邮箱
smtp_password = 'your_password'  # 发件人邮箱密码

# 发件人信息
sender_name = 'Your Name'  # 发件人姓名
sender_email = 'your_email@example.com'  # 发件人邮箱

# 收件人信息
receiver_email = 'recipient@example.com'  # 收件人邮箱

# 邮件内容
subject = 'Test Email'
body = 'This is a test email.'

# 创建邮件对象
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = formataddr((str(Header(sender_name, 'utf-8')), sender_email))
msg['To'] = receiver_email

# 发送邮件
try:
    server = smtplib.SMTP(smtp_server, smtp_port)
    server.starttls()  # 使用TLS加密
    server.login(smtp_username, smtp_password)
    server.sendmail(sender_email, [receiver_email], msg.as_string())
    server.quit()
    print("邮件发送成功")
except Exception as e:
    print(f"邮件发送失败: {e}")

关键点解释:

  1. formataddr 函数

    • formataddr 函数用于将发件人的姓名和邮箱地址格式化为一个标准的邮件头格式。它会确保姓名和邮箱地址正确显示在邮件客户端中。
    • 例如:formataddr(('Your Name', 'your_email@example.com')) 会生成 "Your Name <your_email@example.com>"
  2. Header

    • Header 类用于处理非ASCII字符的编码问题。如果你的姓名或主题包含非ASCII字符(如中文),使用 Header 可以确保这些字符正确编码。
  3. msg['From']

    • 使用 formataddr 来设置 msg['From'],确保发件人姓名和邮箱地址正确显示。
  4. msg['To']

    • 直接设置收件人的邮箱地址。

注意事项:

  • 确保SMTP服务器的地址、端口、用户名和密码正确。
  • 如果你使用的是Gmail等第三方邮箱服务,可能需要启用“允许不够安全的应用”或生成应用专用密码。
  • 如果你使用的是企业邮箱,可能需要联系IT部门获取正确的SMTP配置。

通过这种方式,你可以确保邮件客户端正确显示发件人的姓名和邮箱地址,避免显示奇怪的信息。