Python发送邮件实例
在实际开发当中,有时候就需要用到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><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', '<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发送邮件实例相关推荐
- python 发送邮件实例
文件形式的邮件 #!/usr/bin/env python3 #coding: utf-8 import smtplib from email.mime.text import MIMEText fr ...
- html发照片的文本实例,python发送邮件的实例代码(支持html、图片、附件) -电脑资料...
第一段代码: 复制代码代码如下: #!/usr/bin/python # -*- coding: utf-8 -*- import email import mimetypes from email. ...
- Python编程实例-Python发送邮件
Python发送邮件 Python 带有内置的 smtplib 模块,用于使用简单邮件传输协议 (SMTP) 发送电子邮件. smtplib 对 SMTP 使用 RFC 821 协议. 本文中的示例将 ...
- python邮件发送哪个好_最全总结!聊聊 Python 发送邮件的几种方式
1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 我们都知道 Python内置了对 SMTP 的支持,可以发送纯文本.富文本.HTML 等格式的邮件 本文将聊聊利用 Python ...
- python发送邮件及附件
今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...
- python 发送邮件connect none_Python发送邮件功能示例【使用QQ邮箱】
本文实例讲述了Python发送邮件功能.分享给大家供大家参考,具体如下: 这里以QQ邮箱为例说明 登录邮箱点账号 开启smtp 开启时会要求你发送一条短信,发送完成后点已发送. 就有授权码了 代码如下 ...
- 最全总结!聊聊 Python 发送邮件的几种方式
1. 前言 邮件,作为最正式规范的沟通方式,在日常办公过程中经常被用到 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例 ...
- python发送邮件(一)
python发送邮件(一) 最近设计了一个小的应用程序,主要是根据文件中邮件地址发送一份excel中内容,并且在接受方收到邮件都是以网页的格式呈现的. 下面主要是对python发送邮件涉及到的部分知识 ...
- python自动发邮件富文本_Python自动化测试发送邮件太麻烦?!一起聊一聊 Python 发送邮件的3种方式...
1. 前言 发送邮件,我们在平时工作中经用到,做为测试人员,在自动化测试中用的也比较多,需要发送邮件给某领导 SMTP是Python默认的邮件模块,可以发送纯文本.富文本.HTML 等格式的邮件 今天 ...
最新文章
- malloc 初始化_你真的了解 NSObject 对象的初始化吗?
- 下拉日期控件 (转)
- 1/100. Jewels and Stones
- 安装bashee-1-1.2.1.tar.bz2多媒体播放器时的出错问题
- 自己动手开发调试器 01
- 常数中有换行符的错误
- 使用tSQLt创建SQL单元测试实用程序过程
- Linux下的信号处理
- jquer同时选择多个不同的id执行同意操作
- Linux下如何查看高CPU占用率线程 专题
- Unity3d 代码修改并恢复鼠标的图标
- JLink OB STM32F072 固件的过程
- 无线打印 airprint 服务器,怎么设置普通打印机也能airprint无线打印
- 国科大学习资料--人工智能原理与算法-第十次作业解析(学长整理)
- strtok函数源码
- 国产实时操作系统+intel x86/龙芯平台超边缘计算机方案
- Linux中bash文档翻译
- java实行excel cell内换行
- 职场人际交往28招实用技巧
- msu安装报0x80240037解决方法
热门文章
- 【虚幻引擎】UE4/UE5 材质
- C++语法——详解智能指针的概念、实现原理、缺陷
- 这几行码是什么意思呢
- 吉软-java-第八次作业
- linux module load, show, 包管理,找到包的路径
- mmclassification
- linux学习-安装centos
- datastage配置jdbc_Datastage 11.5新功能介绍----Hive Connector
- 图文教程,Nginx+Keepalived(双机热备)介绍已经搭建高可用负载均衡环境
- 010Editor十六进制转图片(攻防演练-决定用和决一死战)