这里以QQ邮箱为例,封装一个简单的发送邮件函数,支持普通文本和富文本以及附件发送功能。
代码
import os
import smtplib
from email import encoders
from email.header import Header
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_mail(from_address, to_address, auth_code, subject, content='', subtype='plain', attachment=None):
"""
发送邮件函数
:param from_address: 发送邮箱号
:param to_address: 接收邮箱号
:param auth_code: 授权码,登录qq邮箱-设置-账户-pop3/smtp开启,获取授权码
:param subject: 邮件标题
:param content: 邮件内容
:param subtype: 邮件内容类型,普通:plain,富文本:html
:param attachment: 附件名称
:return:
"""
# 创建邮件对象,并设置标题、发送人、收件人、邮件内容等信息
message = MIMEMultipart()
# 邮件标题
message['Subject'] = Header(subject, 'utf-8')
message['From'] = from_address
message['To'] = to_address
# 邮件正文
message.attach(MIMEText(content.encode('utf-8'), subtype, 'utf-8'))
# 添加附件
if attachment:
filename = os.path.basename(attachment)
mime = MIMEBase('application', 'octet-stream')
mime.add_header('Content-Disposition', 'attachment', filename=filename)
# 附件内容
with open(attachment, 'rb') as f:
mime.set_payload(f.read())
# Base64编码
encoders.encode_base64(mime)
# 添加到MIMEMultipart
message.attach(mime)
# 设置服务器地址和端口号
smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)
smtp.set_debuglevel(1)
# 登录邮箱号和对应的授权码
smtp.login(from_address, auth_code)
# 发送邮箱号和接收邮箱号
smtp.sendmail(from_address, to_address, message.as_string())
smtp.quit()
if __name__ == '__main__':
msg = '''
泉眼无声惜细流,树阴照水爱晴柔。
小荷才露尖尖角,早有蜻蜓立上头。
'''
send_mail(from_address="111@qq.com",
to_address='222@qq.com',
auth_code="sdfaefeaf",
subject='古诗-小池',
content=msg)
QQ邮箱设置
运行结果
程序运行之后即可登陆邮箱查看邮件,示例: