案例背景
我的博客下面评论都是各种要数据的......一个一个发其实很浪费时间的,每次输入评论者的邮箱,然后打开数据所在的文件夹,上传,填写标题正文,发送.......
一模一样的流程,所以这种重复性的劳动肯定要用Python来解决了。
准备
这次代码主要依赖email库,这个库应该不用下载,Python自带。
当然想要你的邮箱能被代码运行,首先你得准备配置一下你的邮箱。
例如QQ邮箱,打开设置:
然后找到账户页面下的SMTP服务
把pop3/SMTP这个服务打开。
当然还需要手机短信验证啥的,不过应该不难。
开了服务后会得到一个类似于密码一样的一串字母,这是授权码,在代码里面你得输入才能登陆到邮箱上去。
代码实现
这里导包,然后输入自己的邮箱,要发的人的邮箱,可以是列表,就实现了群发:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header
fromaddr = '22********@qq.com'
password = '********'
toaddrs = ['2717*****6@qq.com', '22******61@qq.com']
content = '可以的麻烦点赞关注一下,谢谢啦.'
textApart = MIMEText(content)
k=7
kind_d={1:'二手车',2:'网飞影视',3:'天气聚类',4:'经济增长',5:'外卖文本分类',6:'文本十分类',7:'泰坦尼克号'}
kind=kind_d[k]
我把我的邮箱和密码都*号打码了 ,要用的输入你们自己的邮箱(fromaddr)和授权码(password),还有接受目标的邮箱(toaddrs)就行。
content是邮件正文,字符串,可以自己改。
至于下面的k=7,kind_d字典, kind,这是我用来选择发哪些附件的变量选择....有的人评价要二手车数据,有的评论要网飞影视数据.....我赋值k就改变了kind,然后对kind进行条件判断,来选择我要发送的附件:
if kind=='二手车':
File = 'D:\\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件1:估价训练数据.txt'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='附件1:估价训练数据.txt')
File1 = 'D:\AAA最近要用\\数学建模\\21MathorCup挑战杯\\2021年MathorCup大数据竞赛赛道A\\附件\\附件2:估价验证数据.txt'
Apart1 = MIMEApplication(open(File1, 'rb').read())
Apart1.add_header('Content-Disposition', 'attachment', filename='附件2:估价验证数据.txt')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m.attach(Apart1)
m['Subject'] = kind
elif kind=='网飞影视':
File = 'D:\\AAA最近要用\\接单项目\\网飞电影\\netflix_titles.csv'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='netflix_titles.csv')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m['Subject'] = kind
elif kind=='天气聚类':
File = 'D:\\AAA最近要用\\接单项目\\天气\\天气数据.zip'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='天气数据.zip')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m['Subject'] = kind
elif kind=='经济增长':
File = 'D:\\AAA最近要用\\接单项目\\00熟人\\姜珮瑶经济增长\\实证\\data.xlsx'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='data.xlsx')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m['Subject'] = kind
elif kind=='外卖文本分类':
File = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\外卖.xlsx'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='外卖.xlsx')
File1 = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\stopwords.txt'
Apart1 = MIMEApplication(open(File1, 'rb').read())
Apart1.add_header('Content-Disposition', 'attachment', filename='stopwords.txt')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m.attach(Apart1)
m['Subject'] = kind
elif kind=='文本十分类':
File = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\十分类文本.xlsx'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='十分类文本.xlsx')
File1 = 'D:\\AAA最近要用\\深度学习\\自己的项目\\中文情感分类\\stopwords.txt'
Apart1 = MIMEApplication(open(File1, 'rb').read())
Apart1.add_header('Content-Disposition', 'attachment', filename='stopwords.txt')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m.attach(Apart1)
m['Subject'] = kind
elif kind=='泰坦尼克号':
File = 'D:\\AAA最近要用\\kaggle\\泰坦尼克号\\train.csv'
Apart = MIMEApplication(open(File, 'rb').read())
Apart.add_header('Content-Disposition', 'attachment', filename='train.csv')
File1 = 'D:\\AAA最近要用\\kaggle\\泰坦尼克号\\test.csv'
Apart1 = MIMEApplication(open(File1, 'rb').read())
Apart1.add_header('Content-Disposition', 'attachment', filename='test.csv')
m = MIMEMultipart()
m.attach(textApart)
m.attach(Apart)
m.attach(Apart1)
m['Subject'] = kind
当然如果你不需要判断发什么附件就直接拿出一段用就行。
要加很多附件可以写循环。
File是文件路径,后面用MIMEApplication读取,然后生成MIMEMultipart类命名为m,后面再对m添加正文,附件。
无论什么类型的附件(常用的txt,xlsx,docx,压缩包等)都可以,在File里面给出它的绝对路径就行。
然后再对m添加发送人,接收人,成功了就打印,没成功就打印报错信息。
m['From'] = Header(fromaddr)
m['To'] = Header(",".join(toaddrs))
try:
server = smtplib.SMTP('smtp.qq.com')
server.login(fromaddr,password)
server.sendmail(fromaddr, toaddrs, m.as_string())
print('success')
server.quit()
except smtplib.SMTPException as e:
print('error:',e)
然后就完成了这个脚本编写。
以后我输入收件人邮箱和我要发送的附件编号,就能自动发邮件了。给各位评价要数据的同学们更加迅速的服务~