python实现邮件自动发送


Posted in Python onAugust 10, 2019

本文实例为大家分享了python实现邮件自动发送的具体代码,供大家参考,具体内容如下

case 1:纯文本和HTML文件发送

# -*- coding: UTF-8 -*-


import smtplib
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):
 '''
 @subject:邮件主题
 @msg:邮件内容
 @toaddrs:收信人的邮箱地址
 @fromaddr:发信人的邮箱地址
 @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
 @password:发信人的邮箱密码
 '''

 mail_msg = MIMEMultipart()
 if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
  subject = unicode(subject, 'utf-8')
 mail_msg['Subject'] = subject
 mail_msg['From'] =fromaddr
 mail_msg['To'] = ','.join(toaddrs)
 mail_msg.attach(MIMEText(msg, 'plain', 'utf-8')) #f发送文本文件
 #mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) #发送html格式邮件
 try:
  s = smtplib.SMTP()
  s.connect(smtpaddr) #连接smtp服务器
  s.login(fromaddr,password) #登录邮箱
  s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
  s.quit()
  print "邮件发送成功!"
 except Exception,e:
  print "Error: unable to send email"
  print traceback.format_exc()


if __name__ == '__main__':
 fromaddr = "h******m@126.com"
 smtpaddr = "smtp.126.com"
 toaddrs = ["83****789@qq.com","h******m@126.com"]
 subject = "Hello,我是邮件主题"
 password = "不能告诉你"
 #msg = "Hello,我是邮件内容 !!!"
 msg="""
 <p>Python 邮件发送测试...</p>
 <p><a href="http://www.runoob.com" >这是一个链接</a></p>
 """
 sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

case 2.添加附件:发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplib.smtp发送。

# -*- coding: UTF-8 -*-

# 如何添加附件
import os


import smtplib
import traceback
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
os.chdir("C:\\Users\\h****m\\Desktop\\Auto_email")


def sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password):
 '''
 @subject:邮件主题
 @msg:邮件内容
 @toaddrs:收信人的邮箱地址
 @fromaddr:发信人的邮箱地址
 @smtpaddr:smtp服务地址,可以在邮箱看,比如163邮箱为smtp.163.com
 @password:发信人的邮箱密码
 '''


 mail_msg = MIMEMultipart()
 if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
  subject = unicode(subject, 'utf-8')
 mail_msg['Subject'] = subject
 mail_msg['From'] =fromaddr
 mail_msg['To'] = ','.join(toaddrs)
 #mail_msg.attach(MIMEText(msg, 'plain', 'utf-8')) #f发送文本文件
 mail_msg.attach(MIMEText(msg, 'html', 'utf-8')) #发送html格式邮件
 
 #构造附件1
 att1=MIMEText(open("test_file1.txt",'rb').read(),'base64','utf-8') #注意:直接读取中文文件名会报错 
 att1["Content-Type"] = 'application/octet-stream'
 att1["Content-Disposition"] = 'attachment; filename="test_file1.txt"'
 mail_msg.attach(att1)
 
 
 #构造附件2:添加中文附件名
 att2=MIMEText(open(u'测试文件2.docx','rb').read(),'base64','utf-8')
 att2["Content-Type"] = 'application/octet-stream'
 att2["Content-Disposition"] = 'attachment; filename="test_file2.docx"'
 mail_msg.attach(att2)
 
 try:
  s = smtplib.SMTP()
  s.connect(smtpaddr) #连接smtp服务器
  s.login(fromaddr,password) #登录邮箱
  s.sendmail(fromaddr, toaddrs, mail_msg.as_string()) #发送邮件
  s.quit()
  print "邮件发送成功!"
 except Exception,e:
  print "Error: unable to send email"
  print traceback.format_exc()


if __name__ == '__main__':
 fromaddr = "h****m@126.com"
 smtpaddr = "smtp.126.com"
 toaddrs = ["83****789@qq.com","h****m@126.com"]
 subject = "Hello,我是邮件主题"
 password = "不能告诉你"
 #msg = "Hello,我是邮件内容 !!!"
 msg="""
 <p>Python 邮件发送测试...</p>
 <p><a href=http://www.runoob.com >这是一个链接</a></p>
 """
 sendmail(subject,msg,toaddrs,fromaddr,smtpaddr,password)

case 3: 发送图片(容易被判别为垃圾邮件,导致:SMTPDataError: (554, 'DT:SPM 126……错误)

# -*- coding: utf-8 -*-

fromaddr = "h****m@126.com"
smtpaddr = "smtp.126.com"
toaddrs = ["83****789@qq.com","h****m@126.com"]
subject = "Hello,我是邮件主题"
password = "不能告诉你"

#test3
msg = """
<p>Python 邮件发送添加图片测试...</p>
<p><a href="http://www.runoob.com" >菜鸟教程链接</a></p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""

import os
import smtplib

from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
os.chdir("C:\\Users\\h****m\\Desktop\\Auto_email")

msgRoot = MIMEMultipart('related')
if not isinstance(subject,unicode): #过滤或者不过滤貌似没啥影响
 subject = unicode(subject, 'utf-8')


msgRoot['Subject'] = subject
msgRoot['From'] =fromaddr
msgRoot['To'] = ','.join(toaddrs)


msgAlternative = MIMEMultipart('alternative')
msgRoot.attach(msgAlternative)

msg = """
<p>Python 邮件发送测试...</p>
<p>图片演示:</p>
<p><img src="cid:image1"></p>
"""
msgAlternative.attach(MIMEText(msg, 'html', 'utf-8'))


fp = open('test.PNG', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# 定义图片 ID,在 HTML 文本中引用
msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

s = smtplib.SMTP()
s.connect(smtpaddr) #连接smtp服务器
s.login(fromaddr,password) #登录邮箱
s.sendmail(fromaddr, toaddrs, msgRoot.as_string()) #发送邮件
s.quit()
print "邮件发送成功!"

#邮件发送成功!

对于case3,发送很不稳定,时而发送得出,时而报 SMTPDataError: 554错误,等有空了,看有没有方法弄个稳定的版本。case1,case2在工作中基本够用了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python之import机制详解
Jul 03 Python
通过代码实例展示Python中列表生成式的用法
Mar 31 Python
Python 26进制计算实现方法
May 28 Python
python实现的正则表达式功能入门教程【经典】
Jun 05 Python
Python实现希尔排序算法的原理与用法实例分析
Nov 23 Python
Python编程flask使用页面模版的方法
Dec 28 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
Jun 05 Python
python按比例随机切分数据的实现
Jul 11 Python
教你如何编写、保存与运行Python程序的方法
Jul 12 Python
python实现批量nii文件转换为png图像
Jul 18 Python
PyQt5实现画布小程序
May 30 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
Jun 07 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 #Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 #Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 #Python
Python中的 sort 和 sorted的用法与区别
Aug 10 #Python
Python测试模块doctest使用解析
Aug 10 #Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 #Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 #Python
You might like
php自动获取关键字的方法
2015/01/06 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
yii2中dropDownList实现二级和三级联动写法
2017/04/26 PHP
Javascript 学习书 推荐
2009/06/13 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
JS中substring与substr的用法
2016/11/16 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
js中let和var定义变量的区别
2018/02/08 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
VUE项目初建和常见问题总结
2019/09/12 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
使用python实现baidu hi自动登录的代码
2013/02/10 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
python 判断文件还是文件夹的简单实例
2019/06/10 Python
python sqlite的Row对象操作示例
2019/09/11 Python
python绘制BA无标度网络示例代码
2019/11/21 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
用友笔试题目
2016/10/25 面试题
自考毕业自我鉴定范文
2013/10/27 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
一篇文章告诉你如何实现Vue前端分页和后端分页
2022/02/18 Vue.js
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏