Python通过两个内置库:
smtplib
和
email
,实现邮件功能。
smtplib
库负责发送邮件,
email
库负责构造邮件格式和内容。
邮件发送需要遵守SMTP协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。
Python代码示例
from smtplib import SMTP
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
def create_attach(file_path, filename=None):
# 构造邮件附件
filename = file_path.split('/')[-1] if filename is None else filename
print('Attach File: ', filename)
attach = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')
attach["Content-Type"] = 'application/octet-stream'
attach["Content-Disposition"] = f'attachment; filename="{filename}"' # 这里的filename可以任意,写什么名字,邮件中显示什么名字
return attach
def send_email(mail_sender, mail_pass, mail_receivers, subject, message, file_list=[], name_sender=None, name_receiver=None):
"""发送邮件
Args:
mail_sender (str): 发送者的邮箱地址
mail_pass (str): 邮箱smtp授权码
mail_receivers (list): 接收者的邮箱地址
subject (str): 邮件主题
message (str): 邮件正文
file_list (list): 邮件附件文件路径列表
name_sender (str): 发送者昵称
name_receiver (str): 接收者昵称
"""
type = 'plain'
name_sender = mail_sender if name_sender is None else name_sender
name_receiver = 'hello' if name_receiver is None else name_receiver
header_from = f'{name_sender} <{mail_sender}>'
header_to = name_receiver
print('From: ', header_from)
print('To: ', header_to)
print('Subject: ', subject)
print('Text: ', message)
email = MIMEMultipart()
email["From"] = Header(header_from)
email["To"] = Header(header_to, "utf-8")
email['Subject'] = Header(subject, 'utf-8')
# 添加正文
email.attach(MIMEText(message, type, 'utf-8'))
# 添加附件
for file_path in file_list:
att = create_attach(file_path)
email.attach(att)
# email = MIMEText(message, type, "utf-8")
# email["From"] = Header(header_from)
# email["To"] = Header(header_to, "utf-8")
# email["Subject"] = Header(subject, "utf-8")
try:
mail_host = "smtp.qq.com" # SMTP服务器
server = SMTP(mail_host) # 设置服务器
server.login(mail_sender, mail_pass)
server.sendmail(mail_sender, mail_receivers, email.as_string())
server.quit()
print('邮件发送成功!')
except:
print('邮件发送失败!')
if __name__=='__main__':
mail_sender = '242***@qq.com' # 发送者的邮箱地址
mail_pass = "********" # QQ邮箱smtp授权码
mail_receivers = ['***@163.com'] # 接收者的邮箱地址
subject = 'TEST2-2' # 邮件主题
message = 'HelloPython' # 邮件正文
file_list = ['./create_gif.py'] # 邮件附件
name_sender = '123' # 发送者昵称
name_receiver = '234' # 接收者昵称
send_email(mail_sender, mail_pass, mail_receivers, subject, message, file_list=file_list,
name_sender=name_sender, name_receiver=name_receiver)
设置QQ邮箱授权码
运行效果
参考
https://blog.youkuaiyun.com/libaiup/article/details/129832967
https://zhuanlan.zhihu.com/p/624812616?utm_id=0
https://blog.youkuaiyun.com/m0_64336780/article/details/126186424