在实际开发当中,有时候就需要用到Python发送一些代码构造的邮件信息,最近刚好有接触到这一块,就顺便总结一下。

1、发html、plain格式邮件,不带附件

# -*- coding: UTF-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
from email.header import Headerclass SendMail(object):def __init__(self, mail_title, mail_contain):#初始化发送者与接收者邮箱self.sender = '发送邮箱地址'self.accepter = '接收邮箱地址列表' # ['1@xx.com','2@xx.com']用于发送多个邮箱self.mail_title = mail_title # 邮件标题self.mail_contain = mail_contain # 邮件内容def send_data(self):print('邮件发送中....')try:msg = MIMEText(self.mail_contain, 'html', 'utf-8') # 内容, 格式, 编码,这里现在是发送html格式msg['From'] = formataddr(["发件人邮箱昵称", self.sender])msg['To'] = ";".join(self.accepter) # 以分号拼接使得群发邮件msg['Subject'] = self.mail_title #标题server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 这里以QQ邮箱为例server.login(self.sender, "邮箱授权码") # 登录邮箱后可以获取server.sendmail(self.sender, self.accepter, msg.as_string()) #发送server.quit() # 退出except Exception as e:print(e, '发送失败....')

2、发送带附件的邮件

class SendMail(object):def __init__(self, mail_title, mail_contain):#初始化发送者与接收者邮箱self.sender = '发送邮箱地址'self.accepter = '接收邮箱地址列表' # ['1@xx.com','2@xx.com']self.mail_title = mail_titleself.mail_contain = mail_containdef send_data(self):print('邮件发送中....')try:#创建一个带附件的实例message = MIMEMultipart()message['From'] = formataddr(["发件人邮箱昵称", self.sender]) # 格式化发件人message['To'] = ";".join(self.accepter) # 多人抄送subject = self.mail_title # 邮件标题message['Subject'] = Header(subject, 'utf-8')#邮件正文内容message.attach(MIMEText(self.mail_contain, 'plain', 'utf-8'))# 构造附件1,传送当前目录下的 data.txt 文件att1 = MIMEText(open('data.txt', 'rb').read(), 'base64', 'utf-8')att1["Content-Type"] = 'application/octet-stream'# 这里的filename可以任意写,写什么名字,邮件中显示什么名字att1["Content-Disposition"] = 'attachment; filename="data.txt"'message.attach(att1)# 构造附件2,传送当前目录下的 test01.txt 文件att2 = MIMEText(open('test01.txt', 'rb').read(), 'base64', 'utf-8')att2["Content-Type"] = 'application/octet-stream'att2["Content-Disposition"] = 'attachment; filename="test01.txt"'message.attach(att2)server = smtplib.SMTP_SSL("smtp.qq.com",465)server.login(self.sender, "邮箱授权码")server.sendmail(self.sender, self.accepter, message.as_string())server.quit()print('发送成功')except Exception as e:print(e, '发送失败....')

3、在HTML文本中添加图片(读取本地图片)

class SendMail(object):def __init__(self, mail_title, mail_contain):#初始化发送者与接收者邮箱self.sender = '发送邮箱地址'self.accepter = '接收邮箱地址列表' # ['1@xx.com','2@xx.com']self.mail_title = mail_titleself.mail_contain = mail_containdef send_data(self):print('邮件发送中....')try:message = MIMEMultipart('related')message['From'] = formataddr(["发件人邮箱昵称", self.sender]) # 格式化发件人message['To'] = ";".join(self.accepter) # 多人抄送subject = self.mail_title # 邮件标题message['Subject'] = Header(subject, 'utf-8')msgAlternative = MIMEMultipart('alternative')message.attach(msgAlternative)mail_msg = """<p>Python 邮件发送测试...</p><p>&lt;a href="http://www.lhcx821.com/">木木测试</a></p><p>图片演示:</p><p><img src="cid:image1"></p>"""msgAlternative.attach(MIMEText(mail_msg, 'html', 'utf-8'))# 指定图片为当前目录fp = open('Demo.png', 'rb')msgImage = MIMEImage(fp.read())fp.close()# 定义图片 ID,在 HTML 文本中引用msgImage.add_header('Content-ID', '&lt;image1>')message.attach(msgImage)server = smtplib.SMTP_SSL("smtp.qq.com",465)server.login(self.sender, "邮箱授权码")server.sendmail(self.sender, self.accepter, message.as_string())server.quit()print('发送成功')except Exception as e:print(e, '发送失败....')

可能在发送邮件期间会出现以下报错:

a)报错:Error: A secure connection is requiered(such as ssl):

解决:因为邮箱SSL验证的问题,因此把smtplib.SMTP()改成smtplib.SMTP_SSL(),端口号为465

b)报错:535, b’Error: authentication failed’:

解决:可能是由于用户名不正确,因此代码中的用户名应该填写为邮箱地址@前面部分 ,或是在邮箱设置的帐户昵称

c)SMTP服务器可根据发送的邮箱做相应的选择,如代码中使用163邮箱则设为mail_host = “smtp.qq.com” :

解决:可以设置成"smtp.126.com"、smtp.163.com、"smtp.qq.com"等等

d)代码中的密码mail_pass为授权码,并非邮箱密码,授权码用于登录第三方邮件客户端的专用密码:

解决:QQ邮箱可通过设置→帐户→生成授权码;网易邮箱126/163可通过设置→客户端授权密码

e)之前测试从QQ邮箱发送到163邮箱会被识别为垃圾邮件而被拒收。所以最好收发邮件的邮箱要同类。

最后附加一下C#的发邮实例,换汤不换药:

using System;
using System.Net.Mail;namespace send_email
{class Program{static void Main(string[] args){SendMailUse();}public static void SendMailUse(){string host = "smtp.qq.com";// 邮件服务器smtp.qq.com表示QQ邮箱服务器    string userName = "xxxxxx@qq.com";// 发送端账号   string password = "aygxddqaigomdjfg";// 发送端密码(这个客户端重置后的密码):授权码SmtpClient client = new SmtpClient();client.DeliveryMethod = SmtpDeliveryMethod.Network;//指定电子邮件发送方式    client.Host = host;//邮件服务器client.UseDefaultCredentials = true;client.Credentials = new System.Net.NetworkCredential(userName, password);//用户名、密码string strfrom = userName;string strto = "xxxxx@qq.com"; // 发送人//string strcc = "xxxxxx@qq.com";//抄送string subject = "C#邮件发送测试-标题";//邮件的主题             string body = "测试邮件内容";//发送的邮件正文  System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();msg.From = new MailAddress(strfrom, "xyf");msg.To.Add(strto);//msg.CC.Add(strcc);msg.Subject = subject;//邮件标题   msg.Body = body;//邮件内容   msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码   msg.IsBodyHtml = true;//是否是HTML邮件   msg.Priority = MailPriority.High;//邮件优先级   try{client.Send(msg);Console.WriteLine("发送成功");}catch (System.Net.Mail.SmtpException ex){Console.WriteLine(ex.Message, "发送邮件出错");}}}
}

Python发送邮件实例相关推荐

  1. python 发送邮件实例

    文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...

  2. html发照片的文本实例,python发送邮件的实例代码(支持html、图片、附件) -电脑资料...

    第一段代码: 复制代码代码如下: #!/usr/bin/python # -*- coding: utf-8 -*- import email import mimetypes from email. ...

  3. Python编程实例-Python发送邮件

    Python发送邮件 Python 带有内置的 smtplib 模块,用于使用简单邮件传输协议 (SMTP) 发送电子邮件. smtplib 对 SMTP 使用 RFC 821 协议. 本文中的示例将 ...

  4. python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...

  5. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  6. python 发送邮件connect none_Python发送邮件功能示例【使用QQ邮箱】

    本文实例讲述了Python发送邮件功能.分享给大家供大家参考,具体如下: 这里以QQ邮箱为例说明 登录邮箱点账号 开启smtp 开启时会要求你发送一条短信,发送完成后点已发送. 就有授权码了 代码如下 ...

  7. 最全总结!聊聊 Python 发送邮件的几种方式

    1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例 ...

  8. python发送邮件(一)

    python发送邮件(一) 最近设计了一个小的应用程序,主要是根据文件中邮件地址发送一份excel中内容,并且在接受方收到邮件都是以网页的格式呈现的. 下面主要是对python发送邮件涉及到的部分知识 ...

  9. python自动发邮件富文本_Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式...

    1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...

最新文章

  1. malloc 初始化_你真的了解 NSObject 对象的初始化吗?
  2. 下拉日期控件 (转)
  3. 1/100. Jewels and Stones
  4. 安装bashee-1-1.2.1.tar.bz2多媒体播放器时的出错问题
  5. 自己动手开发调试器 01
  6. 常数中有换行符的错误
  7. 使用tSQLt创建SQL单元测试实用程序过程
  8. Linux下的信号处理
  9. jquer同时选择多个不同的id执行同意操作
  10. Linux下如何查看高CPU占用率线程 专题
  11. Unity3d 代码修改并恢复鼠标的图标
  12. JLink OB STM32F072 固件的过程
  13. 无线打印 airprint 服务器,怎么设置普通打印机也能airprint无线打印
  14. 国科大学习资料--人工智能原理与算法-第十次作业解析(学长整理)
  15. strtok函数源码
  16. 国产实时操作系统+intel x86/龙芯平台超边缘计算机方案
  17. Linux中bash文档翻译
  18. java实行excel cell内换行
  19. 职场人际交往28招实用技巧
  20. msu安装报0x80240037解决方法

热门文章

  1. 【虚幻引擎】UE4/UE5 材质
  2. C++语法——详解智能指针的概念、实现原理、缺陷
  3. 这几行码是什么意思呢
  4. 吉软-java-第八次作业
  5. linux module load, show, 包管理,找到包的路径
  6. mmclassification
  7. linux学习-安装centos
  8. datastage配置jdbc_Datastage 11.5新功能介绍----Hive Connector
  9. 图文教程,Nginx+Keepalived(双机热备)介绍已经搭建高可用负载均衡环境
  10. 010Editor十六进制转图片(攻防演练-决定用和决一死战)