python实现自动发送邮件发送多人、群发、多附件的示例


Posted in Python onJanuary 23, 2018

1、最近公司实现部分数据统计、分析的报表进行每天定时发送到相关人员的邮箱之中的配置代码被人为删除了,需要重新恢复该功能,由于原先是在linux上使用shell配置发送,实在是太繁琐,所以准备使用python来实现该功能,不过发现网上各种文档都是未经过整理,代码写的很不友善,比如发送多人的只能发送前一个邮箱,附件写死不灵活等等,故特写一遍比较记录。

主要会遇到的几个问题:

      1、smtplib.SMTPAuthenticationError: (550, b'User has no permission')

      2、smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')

             这两个错误是你的密码用的不是授权码导致,授权码生成自行百度。

      3、554 DT:SPM 163 smtp5

这属于网易邮箱的一个退回检测机制导致,貌似跟发送比较频繁有关,我再发送的时候有遇到过,直到添加了一个网易邮箱作为收件箱之后才能发送成功,不知道是不是这个原因导致,具体原因未知,如果有人知道请在私信或者评论下告知,谢谢!!

前期准备查看系统上python版本号:

python实现自动发送邮件发送多人、群发、多附件的示例

显示如图表示已经安装好了。

2、实现代码如下(这是在Windows上的IDEL下编辑测试代码,linux上只有改下附件路径就好了)

# -*- coding: utf-8 -*-
from email import encoders
import os
import traceback
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

# 中文处理
def _format_addr(s):
 name, addr = parseaddr(s)
 return formataddr((Header(name, 'utf-8').encode(), addr))
def send_email(to_addr_in,filepath_in):
 # 邮件发送和接收人配置
 from_addr = '*******@163.com'
 smtp_server = 'smtp.163.com'
 password = '********' #这是你邮箱的第三方授权客户端密码,并非你的登录密码
 to_addr = to_addr_in
 to_addrs = to_addr.split(',')
 msg = MIMEMultipart()
 msg['From'] = _format_addr('Python爱好者 <%s>' % from_addr)  # 显示的发件人
 # msg['To'] = _format_addr('管理员 <%s>' % to_addr)    # 单个显示的收件人
 msg['To'] = ",".join(to_addrs)         # 多个显示的收件人
 msg['Subject'] = Header('来自SMTP的问候……', 'utf-8').encode()  # 显示的邮件标题
 # 需要传入的路径
 # filepath = r'D:\test'
 filepath = filepath_in
 r = os.path.exists(filepath)
 if r is False:
  msg.attach(MIMEText('no file...', 'plain', 'utf-8'))
 else:
  # 邮件正文是MIMEText:
  msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
  # 遍历指定目录,显示目录下的所有文件名
  pathDir = os.listdir(filepath)
  for allDir in pathDir:
   child = os.path.join(filepath, allDir)
   print child.decode('gbk') # .decode('gbk')是解决中文显示乱码问题
   # 添加附件就是加上一个MIMEBase,从本地读取一个文件
   with open(child, 'rb') as f:
    # 设置附件的MIME和文件名,这里是txt类型:
    mime = MIMEBase('file', 'xls', filename=allDir)
    # 加上必要的头信息:
    mime.add_header('Content-Disposition', 'attachment', filename=allDir)
    mime.add_header('Content-ID', '<0>')
    mime.add_header('X-Attachment-Id', '0')
    # 把附件的内容读进来:
    mime.set_payload(f.read())
    # 用Base64编码:
    encoders.encode_base64(mime)
    # 添加到MIMEMultipart:
    msg.attach(mime)
 try:
  server = smtplib.SMTP(smtp_server, 25)
  # server.starttls()
  server.set_debuglevel(1) # 用于显示邮件发送的执行步骤
  server.login(from_addr, password)
  # print to_addrs
  server.sendmail(from_addr, to_addrs, msg.as_string())
  server.quit()
 except Exception, e:
  print "Error: unable to send email"
  print traceback.format_exc()
if __name__ == '__main__':
 send_email('*******@qq.com,*******@163.com','D:\\test')

3、在 PyCharm 里面执行结果如下

python实现自动发送邮件发送多人、群发、多附件的示例

显示邮件已经发送成功了,可在相应的邮箱里面查看,相应的文件夹下存在附件文本

python实现自动发送邮件发送多人、群发、多附件的示例

如果不存在附件文本(这是截图的网易邮箱,上面截图的是QQ邮箱表示两个邮箱都已经收到邮件):

python实现自动发送邮件发送多人、群发、多附件的示例

以上这篇python实现自动发送邮件发送多人、群发、多附件的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python文件特定行插入和替换实例详解
Jul 12 Python
Python数据结构之单链表详解
Sep 12 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
Sanic框架路由用法实例分析
Jul 16 Python
python 解压pkl文件的方法
Oct 25 Python
python并发和异步编程实例
Nov 15 Python
Django 内置权限扩展案例详解
Mar 04 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
python正则表达式面试题解答
Apr 28 #Python
Django中使用celery完成异步任务的示例代码
Jan 23 #Python
python3 发送任意文件邮件的实例
Jan 23 #Python
Python程序员面试题 你必须提前准备!(答案及解析)
Jan 23 #Python
Python实现PS图像明亮度调整效果示例
Jan 23 #Python
matplotlib绘图实例演示标记路径
Jan 23 #Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 #Python
You might like
轻松入门: 煮好咖啡的七个诀窍
2021/03/03 冲泡冲煮
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
php实现微信扫码支付
2017/03/26 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
2018/12/25 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
jQuery toggle()设置CSS样式
2009/11/05 Javascript
js当一个变量为函数时 应该注意的一点细节小结
2011/12/29 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
在jquery中的ajax方法怎样通过JSONP进行远程调用
2014/04/04 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
Vue.js报错Failed to resolve filter问题的解决方法
2016/05/25 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
python删除文本中行数标签的方法
2018/05/31 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
2019/09/29 Python
python多维数组分位数的求取方式
2020/03/03 Python
CSS3教程:background-clip和background-origin
2008/10/17 HTML / CSS
CSS3 box-sizing属性
2009/04/17 HTML / CSS
空指针到底是什么
2012/08/07 面试题
简历里的自我评价范文
2014/02/24 职场文书
求职信结尾怎么写
2014/05/26 职场文书
比赛口号大全
2014/06/10 职场文书
政府四风问题整改措施
2014/10/04 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
高三英语复习计划
2015/01/19 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
如何用python清洗文件中的数据
2021/06/18 Python
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js