使用python简单实现邮件群发的功能
2018-09-12 17:54
751 查看
使用背景:
由于我们公司APP1.0版本要停用,而2.0版本跟1.0不在同一环境中,所以需要邮件通知客户进行更换;
老板甩过来一个Excel表格,里面有3000多客户的邮箱列表,wtf!!
自己手动发肯定是要通宵,而且还不一定能发的完,刚好在学python就试着用python写点代码帮我发了吧。
首先的思路就是:
1、我要读取Excel表格里的邮箱,拿到所有邮箱后,再一一发送;
2、然后使用python发送邮件的库,进行循环发邮件
其实可以预先弄一二十个邮箱账号,修改程序,让捕获到smtplib.SMTPDataError: (554, b'Reject这种异常的时候进行更换账号进行发送;
因为比较懒,所以我就没有去修改升级代码;
大致思路是,当碰到smtplib.SMTPDataError: (554, b'Reject异常的时候,获取当前发送邮箱地址所在列表的索引值,
当更换完账号再次进行发邮件的时候,则从获取的索引值那个位置进行发送邮件,这样就不会重复发送了。
由于我们公司APP1.0版本要停用,而2.0版本跟1.0不在同一环境中,所以需要邮件通知客户进行更换;
老板甩过来一个Excel表格,里面有3000多客户的邮箱列表,wtf!!
自己手动发肯定是要通宵,而且还不一定能发的完,刚好在学python就试着用python写点代码帮我发了吧。
首先的思路就是:
1、我要读取Excel表格里的邮箱,拿到所有邮箱后,再一一发送;
2、然后使用python发送邮件的库,进行循环发邮件
# -*- coding: utf-8 -*- from email.header import Header from email.mime.text import MIMEText import time import xlrd from datetime import date,datetime #导入smtplib邮件发送模块 import smtplib def read_excel(): #打开Excel表格 ExceFileUrl = xlrd.open_workbook(r'C:\Users\user\Desktop\2015.xlsx') # print(ExceFileUrl.sheet_names()) #获取第一个sheet页面 sheet_date = ExceFileUrl.sheet_by_index(0) # print(sheet_date.name,sheet_date.nrows,sheet_date.ncols) #获取低19列的邮箱列表 email_data = sheet_date.col_values(19) # print(email_data) return email_data mail_list = read_excel() mysender = 'xxx-service@XXXXX.net' def sender_mail(): #创建对象 smt_p = smtplib.SMTP() #设置smtp服务器 smt_p.connect(host='smtp.mxhichina.com', port=25) #进行邮箱登录一次 smt_p.login(user=mysender, password='QiXin123-') count_num = 1 #使用for循环来进行发邮件 for i in mail_list: #因为表格中有的邮箱格式不正确,还有一些空字符,在发邮件的时候会出现异常报错,所以要进行捕获下,捕获到这些异常就跳过 try: send_msg = MIMEText('您好,' 'XXX2.0全新升级,XXX1.0版本到2018年10月31号停止所有服务,切换新版本2.0;如有迁移、续费、使用等需求问题请联系XXX,联系电话188XXXXXXXX。','plain', 'utf-8') send_msg['From'] = 'E企信' send_msg['To'] = i send_msg['subject'] = '【XXXX2.0启用】1.0停用--通知' smt_p.sendmail(mysender,i,send_msg.as_string()) #sleep5秒是因为发送频率过快,判定垃圾邮件的几率大大增加了。 time.sleep(5) print('第%d次发送给%s' % (count_num,i)) count_num = count_num + 1 except (UnicodeEncodeError,smtplib.SMTPRecipientsRefused,smtplib.SMTPSenderRefused,AttributeError) as e: #这样打印出来我能知道在发送第几次的时候,哪个邮箱有问题,而且阿里云邮箱一个邮箱最多能发300个 print('第%d次给%s发送邮件的时候出现了异常' % (count_num,i)) continue smt_p.quit() sender_mail()由于阿里云的邮箱限制每个邮箱账号每天最多发300封邮件,我都是手动更换的,遇到Reject的异常程序就停掉了,我就自己更换邮箱账号。
其实可以预先弄一二十个邮箱账号,修改程序,让捕获到smtplib.SMTPDataError: (554, b'Reject这种异常的时候进行更换账号进行发送;
因为比较懒,所以我就没有去修改升级代码;
大致思路是,当碰到smtplib.SMTPDataError: (554, b'Reject异常的时候,获取当前发送邮箱地址所在列表的索引值,
当更换完账号再次进行发邮件的时候,则从获取的索引值那个位置进行发送邮件,这样就不会重复发送了。
相关文章推荐
- 简单实现python收发邮件功能
- python3使用smtplib实现发送邮件功能
- 使用Python实现简单的服务器功能
- Python 使用SMTP 实现发邮件功能
- 利用python实现简单邮件功能
- 用Python 实现刷钻网上抢任务,并实现一个简单的限制使用时间的功能
- Python简单实现邮件群发
- Python django实现简单的邮件系统发送邮件功能
- Python django实现简单的邮件系统发送邮件功能
- 使用shell和python分别实现简单菜单功能--打印当前系统状态信息
- 使用python 3实现发送邮件功能
- 使用shell和python分别实现简单菜单功能--打印当前系统状态信息
- 实现邮箱自动发送邮件功能(群发,单独邮箱发)
- 在Delphi中使用Indy控件实现邮件群发
- 使用python发送简单的邮件
- 使用FLEX实现简单WEB在线拍照功能
- ASP.NET使用Cookie简单实现记住登陆状态功能
- 使用.htaccess实现简单的防盗链功能
- 简单快捷实现ASP在线发邮件功能
- ASP.NET使用AspNetPager实现简单的分页功能