python发送邮件和附件,亲测运行成功
step1:C:\Users\wangrusheng\PycharmProjects\FastAPIProject1\hello.py
功能包括:
1.使用QQ邮箱的SMTP服务器发送邮件。
2.邮件包含HTML格式的正文内容。
3.添加并发送一个位于用户下载目录下的ZIP附件。
4.处理发件人和收件人的显示名称,使用Header和formataddr来编码中文字符。
5.使用SSL连接,通过授权码登录邮箱并发送。
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase # 新增导入
from email import encoders # 新增导入
from email.header import Header
from email.utils import formataddr
# 邮箱配置
mail_host = "smtp.qq.com"
mail_port = 465
sender = '249407@qq.com'
license_code = '不是QQ密码,是SMTP授权码,QQ邮箱 → 设置 → 账户 → 开启POP3/SMTP服务->生成授权码(不是QQ密码)'
receivers = ['153694@qq.com']
# 创建邮件对象
message = MIMEMultipart()
# 设置发件人和收件人
message['From'] = formataddr((
Header('发件人名称', 'utf-8').encode(),
sender
))
message['To'] = formataddr((
Header('汪工', 'utf-8').encode(),
receivers[0]
))
message['Subject'] = Header('Python邮件测试', 'utf-8')
# 添加邮件正文
content = '''
<p>这wrs_test_002是一封Python发送的测试邮件</p>
<p>正文内容支持HTML格式</p>
<p>发送时间:2024-03-20</p>
'''
msg_text = MIMEText(content, 'html', 'utf-8')
message.attach(msg_text)
# 添加附件
file_path = r'C:\Users\wangrusheng\Downloads\age.zip' # 使用原始字符串避免转义问题
with open(file_path, 'rb') as f:
attachment = MIMEBase('application', 'octet-stream')
attachment.set_payload(f.read())
encoders.encode_base64(attachment) # 对附件进行Base64编码
attachment.add_header('Content-Disposition', 'attachment', filename='age.zip')
message.attach(attachment)
# 发送邮件
try:
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
smtpObj.login(sender, license_code)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
smtpObj.quit()
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
step2:
D:\Users\wangrusheng\PycharmProjects\FastAPIProject1\hello.py
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.utils import formataddr # 新增导入
# 邮箱配置
mail_host = "smtp.qq.com"
mail_port = 465
sender = '249407@qq.com'
license_code = '不是QQ密码,是SMTP授权码,QQ邮箱 → 设置 → 账户 → 开启POP3/SMTP服务->生成授权码(不是QQ密码)'
receivers = ['153694@qq.com']
# 创建邮件对象
message = MIMEMultipart()
# 修复发件人格式(关键修改)
message['From'] = formataddr((
Header('发件人名称', 'utf-8').encode(), # 处理中文名称
sender # 真实邮箱地址
))
message['To'] = formataddr((
Header('汪工', 'utf-8').encode(), # 处理中文收件人名称
receivers[0] # 真实收件邮箱
))
message['Subject'] = Header('Python邮件测试', 'utf-8')
# 邮件正文(保持不变)
content = '''
<p>这是一封Python发送的测试邮件</p>
<p>正文内容支持HTML格式</p>
<p>发送时间:2024-03-20</p>
'''
msg_text = MIMEText(content, 'html', 'utf-8')
message.attach(msg_text)
try:
smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
smtpObj.login(sender, license_code)
smtpObj.sendmail(sender, receivers, message.as_string())
print("邮件发送成功")
smtpObj.quit()
except smtplib.SMTPException as e:
print("Error: 无法发送邮件", e)
end