python发送邮件廖雪峰_利用Python的smtplib和email发送邮件
原理
网上已经有了很多的教程讲解相关的发送邮件的原理,在这里还是推荐一下廖雪峰老师的Python教程,讲解通俗易懂。简要来说,SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。而python内置的email模块则是负责邮件的内容、发送方、接收方等内容;具体的操作可以看代码。
而构造一个邮件对象就是一个Messag对象,如果构造一个MIMEText对象,就表示一个文本邮件对象,如果构造一个MIMEImage对象,就表示一个作为附件的图片,要把多个对象组合起来,就用MIMEMultipart对象,而MIMEBase可以表示任何对象。他们的嵌套关系如下:
Message
+- MIMEBase
+- MIMEMultipart
+- MIMENonMultipart
+- MIMEMessage
+- MIMEText
+- MIMEImage
一些错误的总结
[1]提示smtplib.SMTPAuthenticationError: (550, b'User has no permission')
这是因为邮箱没有开启客户端授权,邮箱这边的SMTP服务运行不起来;而现在基本所有的邮件都是需要客户端授权的,这里需要注意一下。解决办法为:进入163邮箱-设置-客户端授权密码-开启(授权码是用于登录第三方邮件客户端的专用密码),非第三方登录密码不变。
[2]提示smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed')
以163邮箱为例,在开启POP3/SMTP服务,并开启客户端授权密码时会设置授权码,将这个授权码代替smtplib.SMTP().login(user,password)方法中的password即可。就是说你代码中的password为你所设置的授权码。
[3]提示554
说明邮件内容缺少信息,在现在的邮箱里一般有些内容需要填写。
代码
# 发送文本
# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
# 发的内容
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
# 发件人
msg['From'] = _format_addr(u'Python爱好者 ' % from_addr)
# 收件人
msg['To'] = _format_addr(u'管理员 ' % to_addr)
# 标题
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
# 发送附件
# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
from_addr = input('From: ')
password = input('Password: ')
to_addr = input('To: ')
smtp_server = input('SMTP server: ')
# 邮件对象:
msg = MIMEMultipart()
msg['From'] = _format_addr(u'Python爱好者 ' % from_addr)
msg['To'] = _format_addr(u'管理员 ' % to_addr)
msg['Subject'] = Header(u'来自SMTP的问候……', 'utf-8').encode()
# 邮件正文是MIMEText:
msg.attach(MIMEText('send with file...', 'plain', 'utf-8'))
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
with open('e:/141.m4a', 'rb') as f:
# 设置附件的MIME和文件名,这里是音乐类型:
mime = MIMEBase('image', 'm4a', filename='141.m4a')
# 加上必要的头信息:
mime.add_header('Content-Disposition', 'attachment', filename='141.m4a')
mime.add_header('Content-ID', '<0>')
mime.add_header('X-Attachment-Id', '0')
# 把附件的内容读进来:
mime.set_payload(f.read())
# 用Base64编码:
encoders.encode_base64(mime)
# 添加到MIMEMultipart:
msg.attach(mime)
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(from_addr, password)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
代码经笔者都测试过,应该是没问题的。遇到错误看看是不是客户端的授权问题,或者是python的版本的问题。
python发送邮件廖雪峰_利用Python的smtplib和email发送邮件相关推荐
- python发送邮件廖雪峰_【Python】利用邮件远程控制自己电脑
下载W3Cschool手机App,0基础随时随地学编程 导语 最近经常需要简单地远程控制一下电脑,比如远程查看一下电脑上模型训练的情况,模型训练完之后远程关闭电脑等等,于是就想着利用python来简单 ...
- python廖雪峰_【Python】python中实现多进程与多线程
进程与线程 进程(process)就是任务,是计算机系统进行资源分配和调度的基本单位[1].比如,打开一个word文件就是启动了一个word进程. 线程(thread)是进程内的子任务.比如word中 ...
- python post请求 上传图片_利用python模拟实现POST请求提交图片的方法
本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍: 使用requests来模拟HTTP请求本来是一件非常轻松的事情,比如上传 ...
- python实现邮件客户端_利用python实现简单的邮件发送客户端示例
脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...
- python制作图片墙_利用python生成照片墙的示例代码
PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...
- python处理nc数据_利用python如何处理nc数据详解
利用python如何处理nc数据详解 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: 利用python如何处理nc数据详解.txt ] (友情提示:右键点上行txt ...
- python爬虫新闻热点_利用Python网络爬虫技术追踪时事热点
龙源期刊网 http://www.qikan.com.cn 利用 Python 网络爬虫技术追踪时事热点 作者:廖泽龙 王昊源 刘紫嫣
- python制作电脑软件_利用PYTHON制作桌面版爬虫软件(一)
抱歉,对长沙房地产数据的挖掘与分析[三],想了蛮久,觉得对自己的分析结果不是很理想.等我完善好了,我再发出来吧.今天继续开启新的一专题.主要讲解如何用PYTHON实现简单的桌面软件的制作. 题外话,我 ...
- python计算面积代码_利用Python求阴影部分的面积实例代码
利用Python求阴影部分的面积实例代码 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: 利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...
最新文章
- 根据矩阵变化实现基于 HTML5 的 WebGL 3D 自动布局
- 公司 表名规则 TN基础表 TR关系表 TL定义表
- Android 之窗口小部件详解--App Widget
- 表单FORM的5个属性name,method,action,enctype,target
- 霸气侧漏HTML5--之--canvas(1) api + 弹球例子
- PostgreSQL字符集问题
- Cloud for Customer动态控制任意UI element的visibility
- c ++明明的随机数_从列表C ++程序中随机建议电影
- SpringMVC简单小案例
- 技术面试时,程序员需要什么样的编程测试?
- python中文帮助_python中文官方手册等手册链接地址
- java连接mysql,报错Could not create connection to database server.
- 如何用photoshop做24色环_教大家用PS画色轮图
- 二等分计算机打印机尺寸,241两等分打印纸尺寸 电脑打印纸,规格241mm等份是2等份,是多大的纸呀?...
- Tansat XCO2数据下载
- 【5G之道】第十四章:异构网络部署
- luogu3755 [CQOI2017]老C的任务
- 微信支付 postman_微信刷脸支付补贴政策有哪些?
- UFT(Unified Functional Testing)软件基本使用—自动化测试
- MySQL安装2出现Typical_Mysql安装 - osc_c7lpn2ge的个人空间 - OSCHINA - 中文开源技术交流社区...
热门文章
- oracle 僵死的进程,查看进程僵死状态 linux查看进程的方法有几种
- 免费的redis可视化工具
- Linux系统下基于IO多路复用的大规模可靠UDP服务器的实现(三)
- 美团外卖打开自动提示领外卖红包iphone口令保姆级教程(仅支持iphone)
- BP算法作为一种常用的神经网络训练算法有哪些优势
- 面试干货4——你对Java类加载器(自定义类加载器)有了解吗?
- 十进制数转换为二进制数 C++
- MySQL子查询 嵌套查询
- [iOS] 解决:你很郁闷UIDatePicker为什么显示不出来
- mysql带有in的子查询_含有IN的子查询