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轻量级ORM框架Peewee访问sqlite数据库的方法详解
Jul 20 Python
浅析Python中return和finally共同挖的坑
Aug 18 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
Python SqlAlchemy动态添加数据表字段实例解析
Feb 07 Python
对Python通过pypyodbc访问Access数据库的方法详解
Oct 27 Python
python常用排序算法的实现代码
Nov 08 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 Python
python logging模块的使用
Sep 07 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
Python集合的基础操作
Nov 01 Python
Python 视频画质增强
Apr 28 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中通过ADO调用Asscess数据库和COM程序
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
如何判断鼠标是否在DIV的区域内
2013/11/13 Javascript
javascript事件函数中获得事件源的两种不错方法
2014/03/17 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
jquery操作复选框checkbox的方法汇总
2015/02/05 Javascript
JS如何判断是否为ie浏览器的方法(包括IE10、IE11在内)
2015/12/13 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
常用的javascript设计模式
2017/01/11 Javascript
浅析vue数据绑定
2017/01/17 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
Bootstrap模态对话框用法简单示例
2018/08/31 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
Echarts在Taro微信小程序开发中的踩坑记录
2020/11/09 Javascript
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
HTML5 canvas基本绘图之填充样式实现
2016/06/27 HTML / CSS
教师现实表现材料
2014/02/14 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
先进班集体事迹材料
2014/12/25 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
文艺晚会开场白
2015/05/29 职场文书
最美乡村教师观后感
2015/06/11 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
Python天气语音播报小助手
2021/09/25 Python