简介

此项目是通过读取excel文件内容(包含公司名称,公司类型,邮箱-每个公司对应多个邮箱)自动批量发送邮件到目标公司。亲测可用。

完整代码


import smtplib
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
from email.header import Header
import sys
from importlib import reload
import xlrd
encoding = 'utf-8'def main(mail_class):# mail_class='139' 使用139邮箱发送# mail_class='ha' 使用河南移动省公司内部邮箱发送# 读取客户信息文件excelroot_dir = 'D:\pycharm\pycharm_chengxu\python自动发送邮件项目'file_path = root_dir + "\\youxiang.xls"file_list = []work_book = xlrd.open_workbook(file_path)sheet_data = work_book.sheet_by_name('Sheet1')print('now is process :', sheet_data.name)Nrows = sheet_data.nrowsfor i in range(1, Nrows):file_list.append(sheet_data.row_values(i))if mail_class=='ha':# 发送邮件的相关信息,公司内部邮箱smtpHost = 'smtp.ha.chinamobile.com'  # 内部邮箱的smtp服务器地址,不同的省份地址不同,一般是自己的邮件后缀,如河南省公司的邮件后缀是ha.chinamobile.com。smtpPort = '25'sslPort = '465'   username = '********@ha.chinamobile.com'password = '*****************'   #这里的密码需要从网页版邮箱页面获取授权码,授权码就是密码fromMail = '中国移动通信集团有限公司 <********@ha.chinamobile.com>'  # 中国移动通信集团有限公司是发送者名字,可以随意定义。if mail_class == '139':# 发送邮件的相关信息,139邮箱smtpHost = 'smtp.139.com'smtpPort = '25'sslPort = '465'username = '**********@139.com'  # 自己的用户名password = '**********'  # 也是从网页版139邮箱获取授权码。fromMail = '中国移动通信集团有限公司 <**********@139.com>'# 设置默认字符集为UTF8 不然有些时候转码会出问题default_encoding = 'utf-8'if sys.getdefaultencoding() != default_encoding:reload(sys)sys.setdefaultencoding(default_encoding)# 连接登录邮箱try:# #普通方式登录邮箱,使用内网 # print('创建smtp对象')# smtp = smtplib.SMTP()# smtp.connect(smtpHost)# smtp.login(username, password)# print('登录服务器成功')# 纯粹的ssl加密方式,通信过程加密,邮件数据安全--登陆邮箱。此种方式可以使用外网登陆发送smtp = smtplib.SMTP_SSL(smtpHost,sslPort)smtp.ehlo()smtp.login(username, password)print('登录服务器成功')except Exception as e:print(e)# 循环发送邮件for i in range(len(file_list)):msg = MIMEMultipart()# 构造邮件标题和内容,subject = "中国移动通信集团有限公司高精度定位服务"# 获取最新的email路径,如果存在说明有报错,构造附件,发送email路径下的excel文件# 构造邮件附件 并封装att1 = MIMEApplication(open('D:\pycharm\pycharm_chengxu\python自动发送邮件项目\无人机行业解决方案.pdf', 'rb').read())att1['Content-Type'] = 'application/octet-stream'# 这里的filename可以任意写,写什么邮件就显示什么名字att1.add_header('Content-Disposition', 'attachment', filename="无人机行业解决方案.pdf")msg.attach(att1)# 封装邮件主题和来源邮箱和内容msg['Subject'] = Header(subject, encoding)msg['From'] = Header(fromMail)area_company =str(file_list[i][1])company = str(file_list[i][2])email_list = getemail(file_list, i)if len(email_list)==0:print(str(i+1) +":"+company+'无邮箱')continuemsg['To'] = Header(';'.join(email_list), encoding)# 邮件内容,用html来写邮件内容,展现方式比较丰富content = """HTML网页代码"""mail_content = MIMEText(content.encode(encoding), 'html', encoding)msg.attach(mail_content)try:# 发送邮件smtp.sendmail(fromMail, email_list, msg.as_string())print(str(i+1) + ": " + str(company) + "->" + str(len(email_list)) + "封信" + "->" + str(email_list))except Exception as e:print(str(company) + ':发送失败,异常原因:'+str(e))# for email in email_list:#     toMail = email#     msg['To'] = toMail#     try:#         # 发送邮件#         smtp.sendmail(fromMail, toMail, msg.as_string())#     except Exception as e:#         print(e)print('发送完毕')smtp.close()def getemail(file_list,i):email_list=[]if file_list[i][12] == '-' and file_list[i][13] != '-':email_list=file_list[i][13].split(';')if file_list[i][12] != '-' and file_list[i][13] == '-':email_list = file_list[i][12].split(';')if file_list[i][12] != '-' and file_list[i][13] != '-':email_liststr=file_list[i][12]+';'+file_list[i][13]email_list=email_liststr.split(';')if file_list[i][12] == '-' and file_list[i][13] == '-':email_list=[]return email_list
if __name__ == '__main__':main('ha')

注意事项

下面是我运行过程中遇到的各种问题。

1,若使用公网发送邮件,端口号是25;移动公司内部邮箱每天发送邮件数量有限,一般是500封。使用内网发送邮件,端口号是465,每天发送的上限是5000封。
2,139邮箱每天发送的上限是250封。若达到上限,可利用多个邮箱,进行发送。
3,一定要提前在网页版邮箱找到授权码,并打开smtp服务,打开方式可自行在百度进行搜索,比较简单。
4,大批量发送邮件过程中,有些邮件被退回,原因有:①目标邮箱不正确。②发送DATA命令失败。
5,后续还会对此版本进行不断升级改造,若有意向可关注。

利用python读取excel中邮箱进行批量群发,使用中国移动内部邮箱或139邮箱-html编辑的正文并且带附件。相关推荐

  1. 利用python读取excel中的公司名称获取公司的经营范围并回填进excel中

    前几天朋友托我帮完成一份地区教育类型公司的经营范围,表中已经有了公司的名称及地点等信息,但是还缺少经营范围,由于数据量比较大,一个一个的去百度搜再复制到表里,工作量有点大,可能需要我好几天不吃不喝的C ...

  2. python excel绘图-利用python在excel中画图的实现方法

    一.前言 以前大学时候,学EXCEL看到N多大神利用excel画图,觉得很不可思议.今个学了一个来月python,膨胀了就想用excel画图.当然,其实用画图这个词不甚严谨,实际上是利用opencv遍 ...

  3. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作

    问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...

  4. python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例

    本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...

  5. vb.net读取excel并写入dgv_如何用Python读取Excel中的图片?然后写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  6. 如何用Python读取Excel中图片?又如何用Python往Excel中写入图片?

    大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进行分析. 那么你知道如何使用Python读 ...

  7. python 读取excel图片_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  8. 怎么用python读取excel图_如何用Python读取Excel中图片?

    公众号: 早起Python 作者:刘早起 大家好,在使用Python进行办公自动化操作时,一定少不了与Excel表格的交互,我们通常是用pandas处理表格数据,但大多数情况下,都是读取表格中的数值进 ...

  9. python读取Excel中关联表格的数据(只要是同Excel中

    来自CSDN-Mr熊 https://blog.csdn.net/qq_41030861/article/details/80515984 谁能告诉我前面这一堆都是什么啊... python读取Exc ...

最新文章

  1. (Java)注解和反射
  2. BZOJ3653 洛谷3899:谈笑风生——题解
  3. Python 学习笔记——文件对象和操作
  4. [ 总结 ] 删除通过find查找到的文件
  5. Java 面向对象面试题
  6. 安装谷歌json格式转换插件
  7. 光立方体c语言程序,444光立方程序怎么写 光立方原理图、源代码及制作教程
  8. Linux系统下在windows虚拟机中使用数位板的问题及解决办法
  9. ubuntu如何打拼音
  10. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
  11. Deepin 任务栏网速插件推荐 NetSpeed (重构 lfxSpeed)
  12. RationalDMIS 2020高级编程:快速3-2-1构建坐标系
  13. 卸载vue-cli过程中npm uninstall vue-cli -g 一直显示 up to date in 0.042s无法卸载
  14. Stetman读paper小记:BackdoorBench - A Comprehensive Benchmark of Backdoor Learning
  15. 人生路上对我影响最大的老师
  16. ThinkPad X1 Carbon 安装Ubuntu 18.04到移动硬盘 教程指南
  17. Three.js - 模拟太阳、地球、月亮的运动(十一)
  18. Anroid11有多个Launcher应用时,默认其中一个Launcher为启动Launcher,不用弹框选择Launcher
  19. java 创建mdi窗体_Java制作MDI窗体源代码是什么?
  20. 搭建并配置keil嵌入式开发环境教程及stm32应用实例

热门文章

  1. 视频压缩怎么压缩最小?
  2. OpenGL编译着色器
  3. php的构造函数理解
  4. MInd+制作语音识别机器人
  5. 世界上第一台电子计算机ENIAC诞辰60周年--(1946.2.15-2006.2.15)
  6. 孙子兵法:如何应用于软件
  7. 南京邮电大学C语言实验报告4v2(仅供参考)
  8. 关于一元线性回归、共线性与STATA实现
  9. OpenCVSharp入门教程 特征提取①——MSER区域特征提取Maximally Stable Extremal Regions
  10. ipdb模块源代码解读