邮件自动发送
一、邮件自动收发的流程
163邮箱、QQ邮箱,需要准备账号和授权码(密码不好⽤),可以去QQ邮箱官⽹的帮助中⼼去查看授权码的获取⽅式
以下账号(邮箱账号),收件人账号(收件人的邮箱账号)
# smtplib - 登陆邮箱:发送邮件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 1.连接邮箱服务器
# 连接对象 = smtplip.SMTP_SSL(服务器地址, 邮箱服务端⼝)
# 服务器地址:smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
# 邮箱服务端⼝:465或者25
# smtplib.SMTP_SSL(服务器地址,邮箱服务端口(465或25)) - 链接邮箱服务器并且返回一个连接对象
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
# 2.登录邮箱
# 连接对象.login(账号,授权码)
connect.login('账号', '授权码')
# 第二步:准备邮件
# 1.创建邮件对象
email = MIMEMultipart()
# 2.设置邮件的主题
# Header(邮件标题, 编码方式)
heard = Header('邮件的标题', 'utf-8').encode()
email['subject'] = heard
# 3.设置邮件接收者信息(收件人)
email['to'] = '收件人账号'
# 4.设置邮件发件人
email['From'] = '账号 <账号>'
# 5.添加正文
"""
MIMEText(文字内容, 类型, 编码方式)
类型 - plain(普通文字)、html(超文本)
"""
text = MIMEText('我是你爸爸正伟大,养你这么大', 'plain', 'utf-8')
email.attach(text)
# 第三步:通过连接发送邮件
# 连接对象.sendmail(发送人,收件人,邮件对象.as_string())
connect.sendmail('账号', '收件人账号', email.as_string())
connect.quit() # 关闭连接
二、发送邮件图片附件
import smtplib
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
# 1.登录
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('账号', '授权码')
# 2.准备邮件
email = MIMEMultipart()
email['Subject'] = Header('发送附件', 'utf-8').encode()
email['To'] = '收件人账号'
email['From'] = '账号 <账号>'
text = MIMEText('照片再附件内,请注意查收!', 'plain', 'utf-8')
email.attach(text)
# =======================1.图片附件=================
# 3.准备图片
# 1)打开图片读取图片二进制数据
image_data = open('files2/tupian.jfif', 'rb').read()
# 2)创建图片
image = MIMEImage(image_data)
# 3)设置图片为附件
image['Content-Disposition'] = 'attachment; filename="tupian"'
# 4)将图片按附件添加邮件对象中
email.attach(image)
# =============2.其他文件附件=============
# 1)得到文件类容
file_data1 = open('files2/RAMMap.zip', 'rb').read()
# 2)创建文件
file1 = MIMEText(file_data1, 'base64', 'utf-8')
# 3)设置文件为附件
file1['Content-Disposition'] = 'attachment; filename="a.zip"'
# 4)将文件按附件添加邮件对象中
email.attach(file1)
file_data2 = open('files/水质图.xlsx', 'rb').read()
file2 = MIMEText(file_data2, 'base64', 'utf-8')
file2['Content-Disposition'] = 'attachment; filename="data.xlsx"'
email.attach(file2)
# 3.发送邮件
connect.sendmail('账号', '收件人账号', email.as_string())
connect.quit() # 关闭连接
三、超文本邮件内容
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
# 1.登录
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('账号', '授权码')
# 2.准备邮件
email = MIMEMultipart()
email['Subject'] = Header('HTML邮件', 'utf-8').encode()
email['To'] = '收件人账号'
email['From'] = '账号 <账号>'
# ==========邮件正文============
# 1)获取发送的html的内容
content = open('files/sent.html', encoding='utf-8').read()
# 2)将html的内容放到正文中
text = MIMEText(content, 'html', 'utf-8')
email.attach(text)
"""
图⽚对象 = MIMEImage(图⽚⼆进制数据)
image.add_header('Content-ID', '<⾃定义图⽚id>')
邮件对象.attach(图⽚对象)
"""
image_data = open('files2/tupian.jfif', 'rb').read()
image = MIMEImage(image_data)
image.add_header('Content-ID', '<image1>')
email.attach(image)
connect.sendmail('账号', '收件人账号', email.as_string())
connect.quit() # 关闭连接
四、批量发送附件邮件
import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header
from email.mime.text import MIMEText
import os
# 1.登录
connect = smtplib.SMTP_SSL('smtp.qq.com', 465)
connect.login('账号', '授权码')
# 2.准备邮件
email = MIMEMultipart()
email['Subject'] = Header('发送附件', 'utf-8').encode()
email['To'] = '收件人账号'
email['From'] = '账号 <账号>'
text = MIMEText('照片在附件中,请注意查收!', 'plain', 'utf-8')
email.attach(text)
# ==========邮件正文============
# 获取files2文件下的所有文件的 文件名
all_file = os.listdir('files2')
def zip_annex(name):
file_data1 = open(f'files2/{name}', 'rb').read()
file1 = MIMEText(file_data1, 'base64', 'utf-8')
file1['Content-Disposition'] = f'attachment; filename="{name}"'
email.attach(file1)
def jfif_annex(name):
# 1)打开图片读取图片二进制数据
image_data = open(f'files2/{name}', 'rb').read()
# 2)创建图片对象
image = MIMEImage(image_data)
# 3)设置图片为附件
image['Content-Disposition'] = f'attachment; filename="{name}"'
# 4)将图片附件添加到邮件对象中
email.attach(image)
def pdf_annex(name):
file_data1 = open(f'files2/{name}', 'rb').read()
file1 = MIMEText(file_data1, 'base64', 'utf-8')
file1['Content-Disposition'] = f'attachment; filename="{name}"'
email.attach(file1)
for name in all_file:
# 获取所有文件名的文件后缀
id = name.split(".")[1]
if id == 'zip':
zip_annex(name)
elif id == 'jfif':
jfif_annex(name)
else:
pdf_annex(name)
connect.sendmail('账号', '收件人账号', email.as_string())
connect.quit() # 关闭连接