使用python实现群发邮件

实现群发邮件的功能需要用到python里面的smtplib这个库

smtplib是关于 SMTP(简单邮件传输协议)的操作模块,在发送邮件的过程中起到服务器之间互相通信的作用。

实现这个功能主要分为3个方面

1:设置服务器端的信息

2:发送的内容

3:登录发送

一:这里使用网易的邮箱作为发送的邮箱

(1):我们首先要把网易邮箱的SMTP服务开启

python邮件群发不同内容 python群发邮件不封号_发送邮件

下面是配置服务器端的信息

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)