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实现查询IP地址所在地
Mar 29 Python
django通过ajax发起请求返回JSON格式数据的方法
Jun 04 Python
Pycharm导入Python包,模块的图文教程
Jun 13 Python
python 字典中取值的两种方法小结
Aug 02 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
python视频按帧截取图片工具
Jul 23 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python实战之用emoji表情生成文字
May 08 Python
Python中requests做接口测试的方法
May 30 Python
Python实现列表拼接和去重的三种方式
Jul 02 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
使用php判断浏览器的类型和语言的函数代码
2013/02/28 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
PHP使用MPDF类生成PDF的方法
2015/12/08 PHP
htm调用JS代码
2007/03/15 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
基于jquery的checkbox下拉框插件代码
2010/06/25 Javascript
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
BootStrap Tooltip插件源码解析
2016/12/27 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
2018/04/21 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
详解JS预解析原理
2020/06/16 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python Pygame的具体使用讲解
2017/11/03 Python
Pandas中把dataframe转成array的方法
2018/04/13 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
意大利自行车商店:Cingolani Bike Shop
2019/09/03 全球购物
面向游戏玩家和书呆子的极客订阅盒:Loot Crate
2020/11/25 全球购物
介绍一下#error预处理
2015/09/25 面试题
控制工程专业个人求职信
2013/09/25 职场文书
中学生打架检讨书
2014/10/13 职场文书
党员个人整改方案及措施
2014/10/25 职场文书
民事起诉书范本
2015/05/19 职场文书
创业计划书之物流运送
2019/09/17 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL