发送邮件的协议是stmp,python对stmp的支持,可以发送纯文本邮件。
在 Python 中,SMTP(Simple Mail Transfer Protocol)是一种用于发送电子邮件的协议。为了在 Python 中发送电子邮件,我们可以使用内置的 smtplib
和 email
模块。
5.3.1.smtplib 模块:
smtplib
模块提供了一个简单而强大的接口,用于通过 SMTP 协议发送电子邮件。- 它允许连接到邮件服务器,进行身份验证,并发送邮件给指定的收件人。
- 这个模块封装了底层的 SMTP 协议细节,使得发送电子邮件变得更加容易。
例:
# 使用 smtplib 模块发送纯文本邮件
import smtplib
import ssl
from email.message import EmailMessage
EMAIL_ADDRESS = "自己的@163.com" # 邮箱的地址
EMAIL_PASSWORD = "XXXXXX" # 授权码
# 也可以使用ssl模块的context加载系统允许的证书,在登录时进行验证
context = ssl.create_default_context()
subject = "title"
body = "welcome new day"
msg = EmailMessage() # EmailMessage() 是 email.message.EmailMessage 类的构造函数,用于创建一个新的邮件对象。
msg['subject'] = subject # 邮件标题
msg['From'] = EMAIL_ADDRESS # 邮件发件人
msg['To'] = "目标的@163.com" # 邮件的收件人
msg.set_content(body) # 使用set_content()方法设置邮件的主体内容
# 为了防止忘记关闭连接也可以使用with语句
with smtplib.SMTP_SSL("smtp.163.com", 465, context=context) as smtp: # 完成加密通讯
# 连接成功后使用login方法登录自己的邮箱
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
# 方式二:使用send_message方法发送邮件信息
smtp.send_message(msg)
5.3.2.email模块
email
模块提供了创建和处理电子邮件的功能,可以构建复杂的邮件消息。- 它允许你设置邮件的发件人、收件人、主题、正文、附件等,并生成符合标准的 MIME(Multipurpose Internet Mail Extensions)格式的邮件消息。
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
import smtplib
# 配置邮箱及密码
from_mail = '自己的@163.com'
from_mail_password = '授权码'
to_mail = '目标的@163.com'
# 设置总的邮件体对象,对象类型为mixed
msg = MIMEMultipart('mixed')
# 邮件的发件人及收件人信息
msg['From'] = from_mail
msg['To'] = to_mail
# 邮件的主题
msg['Subject'] = 'python mail test'
# 构造文本内容
text_info = 'hello world'
text_sub = MIMEText(text_info, 'plain', 'utf-8')
msg.attach(text_sub)
# 构造超文本
url = "https://docs.python.org/ja/3/library/email.examples.html"
html_info = """
<p>点击下面链接试试</p>
<p><a href="%s">click me</a></p>
<p>welcome new world</p>
"""% url
html_sub = MIMEText(html_info, 'html', 'utf-8')
# 如果不加下边这行代码的话,上边的文本是不会正常显示的,会把超文本的内容当做文本显示
html_sub["Content-Disposition"] = 'attachment; filename="aaa.html"'
# 把构造的内容写到邮件体中
msg.attach(html_sub)
# 构造图片
image_file = open(r'本地\img0.jpg', 'rb').read()
image = MIMEImage(image_file)
image.add_header('Content-ID', '<image1>')
# 如果不加下边这行代码的话,会在收件方方面显示乱码的bin文件,下载之后也不能正常打开,这个地方也可以对文件重命名
image["Content-Disposition"] = 'attachment; filename="aaa.png"'
msg.attach(image)
# 构造附件
txt_file = open(r'本地\csv_op_t1.py', 'rb').read()
txt = MIMEText(txt_file, 'base64', 'utf-8')
txt["Content-Type"] = 'application/octet-stream'
#重命名附件为aaa.txt
txt.add_header('Content-Disposition', 'attachment', filename='aaa.py')
msg.attach(txt)
try:
server = smtplib.SMTP('smtp.163.com')
server.starttls()
server.login(from_mail,from_mail_password)
server.sendmail(from_mail,to_mail,msg.as_string())
server.quit()
print('sendemail successful!')
except Exception as e:
print('sendemail failed next is the reason')
print(e)
email的例子参照: