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

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

发件人 邮件 设置 姓名 1032    来源:    2025-03-13

在使用Python发送邮件时,正确设置发件人姓名和邮箱地址可以避免邮件客户端显示奇怪的信息。通常,邮件客户端会显示发件人的姓名和邮箱地址,如果设置不当,可能会导致显示格式不正确或出现乱码。

以下是如何在Python中正确设置发件人姓名和邮箱地址的示例:

使用 emailsmtplib 模块

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

# 邮件内容
msg = MIMEText('这是一封测试邮件', 'plain', 'utf-8')

# 设置发件人姓名和邮箱地址
sender_name = "发件人姓名"
sender_email = "sender@example.com"
msg['From'] = Header(f"{sender_name} <{sender_email}>", 'utf-8')

# 设置收件人邮箱地址
msg['To'] = "recipient@example.com"

# 设置邮件主题
msg['Subject'] = Header('测试邮件', 'utf-8')

# 发送邮件
try:
    smtp_obj = smtplib.SMTP('smtp.example.com', 587)
    smtp_obj.starttls()  # 启用TLS加密
    smtp_obj.login("your_username", "your_password")
    smtp_obj.sendmail(sender_email, ["recipient@example.com"], msg.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print(f"邮件发送失败: {e}")
finally:
    smtp_obj.quit()

关键点解释

  1. msg['From'] 设置

    • 使用 Header 类来设置发件人姓名和邮箱地址,确保编码正确。
    • 格式为 "发件人姓名 <发件人邮箱>",这样可以确保邮件客户端正确显示发件人信息。
  2. 编码

    • 使用 utf-8 编码来避免中文或其他非ASCII字符出现乱码。
  3. SMTP服务器设置

    • 根据你的邮件服务提供商(如Gmail、Outlook等)设置正确的SMTP服务器地址和端口。
    • 如果需要加密连接,使用 starttls()SMTP_SSL

使用 yagmail 库简化操作

如果你希望简化邮件发送过程,可以使用 yagmail 库:

import yagmail

# 设置发件人邮箱和密码
yag = yagmail.SMTP(user="sender@example.com", password="your_password")

# 发送邮件
yag.send(
    to="recipient@example.com",
    subject="测试邮件",
    contents="这是一封测试邮件",
    headers={"From": "发件人姓名 <sender@example.com>"}
)

print("邮件发送成功")

总结

通过正确设置发件人姓名和邮箱地址,并确保使用正确的编码,可以避免邮件客户端显示奇怪的信息。使用 emailsmtplib 模块可以灵活控制邮件内容,而 yagmail 库则提供了更简洁的API来发送邮件。