使用python实现群发邮件
实现群发邮件的功能需要用到python里面的smtplib这个库
smtplib是关于 SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中起到服务器之间互相通信的作用。
实现这个功能主要分为3个方面
1:设置服务器端的信息
2:发送的内容
3:登录发送
一:这里使用网易的邮箱作为发送的邮箱
(1):我们首先要把网易邮箱的SMTP服务开启
下面是配置服务器端的信息
import smtplib
from email.mime.text import MIMEText
# kpkfqfphtqinbcjg QQ邮箱授权码
# 设置服务器的信息
mail_host = "smtp.163.com"
mail_username = '你的网易邮箱用户名'
sender = '你的网易云邮箱地址'
mail_password = '网易邮箱密码'
receives = ['接收者1','接收者2','接收者3','接收者4']
# 内容要表面上看起来不像是传销类的,避免识别为垃圾邮件
content = '内容'
message = MIMEText(content,'plain','utf-8')
message['Subject'] = '天外来信'
message['from'] = sender
# 实现群发
for i in range(len(receives)):
message['To'] = receives[i]
接下来,我们就要尝试开始发送邮件了
try:
# 启动
smtpObj = smtplib.SMTP()
# smtpObj = smtplib.SMTP_SSL(mail_host)
# 首先连接到服务器
smtpObj.connect(mail_host,25)
# 登录服务器
smtpObj.login(mail_username,mail_password)
# 发送邮件啊
smtpObj.sendmail(sender,receives,message.as_string())
smtpObj.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e)
这里使用的是网易云邮箱,如果要使用QQ邮箱的话,需要加SSL认证
需要这样来启动并且连接到服务器
smtpObj = smtplib.SMTP_SSL(mail_host)
实现发送带有附件的邮件
我们要发送带有图片,文本,文件的邮件。
处理多种形态的邮件主体我们需要 MIMEMultipart 类,而处理图片需要 MIMEImage 类。
首先还是配置服务器端的信息,和上面的基本一样,因为我们需要添加附件,所以要用到MIMEMultipart和MIMEImage,
import smtplib
from email.mime.text import MIMEText
# 新导入的类
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
# 设置服务器的信息
mail_host = "smtp.163.com"
mail_username = '你的网易邮箱用户名'
sender = '你的网易云邮箱地址'
mail_password = '网易邮箱密码'
receives = ['接收者1','接收者2','接收者3','接收者4']
# 内容要表面上看起来不像是传销类的,避免识别为垃圾邮件
content = '内容'
#添加一个MIMEmultipart类,处理正文及附件
message = MIMEMultipart()
message['Subject'] = '天外来信'
message['from'] = sender
# 实现群发
for i in range(len(receives)):
message['To'] = receives[i]
接下来我们来配置,发送邮件部分的东西
#设置eamil信息
#推荐使用html格式的正文内容,这样比较灵活,可以附加图片地址,调整格式等
with open('abc.html','r') as f:
content = f.read()
#设置html格式参数
part1 = MIMEText(content,'html','utf-8')
#添加一个txt文本附件
with open('abc.txt','r')as h:
content2 = h.read()
#设置txt参数
part2 = MIMEText(content2,'plain','utf-8')
#附件设置内容类型,方便起见,设置为二进制流
part2['Content-Type'] = 'application/octet-stream'
#设置附件头,添加文件名
part2['Content-Disposition'] = 'attachment;filename="abc.txt"'
#添加照片附件
with open('1.png','rb')as ph:
picture = MIMEImage(ph.read())
#与txt文件设置相似
picture['Content-Type'] = 'application/octet-stream'
picture['Content-Disposition'] = 'attachment;filename="1.png"'
#将内容附加到邮件主体中
message.attach(part1)
message.attach(part2)
message.attach(picture)
最后登录和发送邮件
try:
# 启动
smtpObj = smtplib.SMTP()
# smtpObj = smtplib.SMTP_SSL(mail_host)
# 首先连接到服务器
smtpObj.connect(mail_host,25)
# 登录服务器
smtpObj.login(mail_username,mail_password)
# 发送邮件啊
smtpObj.sendmail(sender,receives,message.as_string())
smtpObj.quit()
print('success')
except smtplib.SMTPException as e:
print('error',e)