在Python中发送邮件时,正确设置发件人姓名和邮箱地址可以避免邮件客户端显示奇怪的信息。通常,邮件客户端会显示发件人的姓名和邮箱地址。如果你只设置了邮箱地址而没有设置姓名,邮件客户端可能会显示一些不友好的信息,比如只显示邮箱地址或者显示为“未知发件人”。
你可以使用Python的smtplib
和email
库来发送邮件,并通过email.header.Header
和email.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}")
formataddr
函数:
formataddr
函数用于将发件人的姓名和邮箱地址格式化为一个标准的邮件头格式。它会确保姓名和邮箱地址正确显示在邮件客户端中。formataddr(('Your Name', 'your_email@example.com'))
会生成 "Your Name <your_email@example.com>"
。Header
类:
Header
类用于处理非ASCII字符的编码问题。如果你的姓名或主题包含非ASCII字符(如中文),使用 Header
可以确保这些字符正确编码。msg['From']
:
formataddr
来设置 msg['From']
,确保发件人姓名和邮箱地址正确显示。msg['To']
:
通过这种方式,你可以确保邮件客户端正确显示发件人的姓名和邮箱地址,避免显示奇怪的信息。