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中类型检查的详细介绍
Feb 13 Python
简单谈谈python中的语句和语法
Aug 10 Python
Python中单、双下划线的区别总结
Dec 01 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
Python线性拟合实现函数与用法示例
Dec 13 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
详解python 3.6 安装json 模块(simplejson)
Apr 02 Python
Python3.5字符串常用操作实例详解
May 01 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
Python爬取智联招聘数据分析师岗位相关信息的方法
Aug 13 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
Nov 25 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
完美解决thinkphp验证码出错无法显示的方法
2014/12/09 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
原生js实现返回顶部缓冲效果
2017/01/18 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
在Create React App中启用Sass和Less的方法示例
2019/01/16 Javascript
微信小程序实现上传图片裁剪图片过程解析
2019/08/22 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
微信小程序实现手指拖动选项排序
2020/04/22 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
python计算对角线有理函数插值的方法
2015/05/07 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
Hibernate持久层技术
2013/12/16 面试题
实习求职信
2013/12/01 职场文书
培训演讲稿范文
2014/01/12 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
中国梦团日活动总结
2014/07/07 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
大学生求职自荐信
2015/03/24 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫