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实现的一只从百度开始不断搜索的小爬虫
Aug 13 Python
Python守护进程(daemon)代码实例
Mar 06 Python
python自动格式化json文件的方法
Mar 11 Python
详解Python编程中包的概念与管理
Oct 16 Python
python 专题九 Mysql数据库编程基础知识
Mar 16 Python
Python中你应该知道的一些内置函数
Mar 31 Python
Python编程判断这天是这一年第几天的方法示例
Apr 18 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
python迭代dict的key和value的方法
Jul 06 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
Aug 04 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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 数组遍历顺序理解
2009/09/09 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
浅谈php的优缺点
2015/07/14 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
javascript 得到变量类型的函数
2010/05/19 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
浏览器加载、渲染和解析过程黑箱简析
2012/11/29 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
jQuery搜索子元素的方法
2015/02/10 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
原生JS+CSS实现炫酷重力模拟弹跳系统的登录页面
2017/11/01 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python面向对象程序设计之继承与多继承用法分析
2018/07/13 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
Python 如何批量更新已安装的库
2020/05/26 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
详解python中的lambda与sorted函数
2020/09/04 Python
python中time.ctime()实例用法
2021/02/03 Python
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
当当网软件测试笔试题
2015/11/24 面试题
大学毕业生个人自荐信范文
2014/01/08 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
如何利用JavaScript实现二叉搜索树
2021/04/02 Javascript
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers