45.简单邮件传输协议 SMTP
2024-08-27 01:27:50
一丶简单邮件传输协议 简单邮件传输协议 简单邮件传输协议 SMTP
- smtplib 模块:(在 Python3版本中,可以通过 SMTP协议发送邮件的模块常为 smtplib, 并且这个模块属于内置模块,不需要额外安装,以下为该模块常用函数介绍 )
- smtplib.SMTP(host='', port=0, local_hostname=None, [timeout,]) (实例化 SMTP对象,并可以远程 SMTP服务器进行连接;)
- host:远程 smtp主机 地
- port:远程 smtp主机端口。
- local_hostname:标示本地连接用户身份
- timeout:连接超时选项
- smtplib.SMTP_SSL(host='',port=0,local_hostname=None,keyfile=None,certfile=None,[timeout, ]context=None,) (用于连接需要 SSL安全加持才可以连接的MSTP服务器, 是现在比较常用的SMTP实例化连接方式 ;)
- host:远程 smtp主机地址。
- port:远程 smtp主机端口。
- local_hostname:标示本地连接用户身份 。
- keyfile、certfile:ssl连接时使用的 验证书及 私人秘钥文件。
- timeout:连接超时选项。
- context:ssl连接时配置选项 ;
- 参考 :https://docs.python.org/3.6/library/ssl.html#ssl.SSLContext
- SMTP实例化对象内置函数:
- SMTP.set_debuglevel(level):
- level设置实例的调试级别。
- 0,不输出任何调试信息,同时,0也是默认值。
- 1:输出每次请求的单行信息。
- 2:最高级别调试信息输出,记录每一行发送及接收时的命令。
- SMTP.connect(host='localhost', port=0)
- 如果在实例化 SMTP对时候,我们并没有指出连接的主机及端口地址,那么可以在后续的示例中使用该函数进行 smtp服务器的连接 ,其中参数部分为:
- host:smtp主机地址。
- port:smtp主机端口,常用主机端口为 25。
- 如果采用加密方式连接时,常端口为 465或 587
- SMTP.helo([hostname])
- 使用 helo指令向服务器确认身份,告知 smtp服务器连接者身份
- SMTP.verify(address)
- 判断 address所指向的smtp服务器是否存在 ;
- 不过出于安全考虑,一般 smtp邮件服务器都会屏蔽这个指令。
- SMTP.login(user,passwd)
- 成功连接到smtp服务器之后,可以通过该函数登录对应邮箱账号。
- user:对应 smtp服务器邮件登录用户名。
- passwd:对应 smtp服务器邮件登录密码。
- STMP.starttls(keyfiles=None,cerfile=None,context=None)
- 启用 TLS安全传输命令,之后所有的 SMTP指令在传输的时候,都会加密传输。
- SMTP.sendmail(from_addr,to_addrs,msg)
- 通过登录邮件服务器用户向目标发送。
- from_addr:发送者邮箱
- to_addrs:接收邮件的用户箱。
- 这个值可以是一有效邮箱用户列表 [ ''xx1@xx.com", 'xx2@xx.com']
- 这里需要注意的是,邮件内容有一定格式字符串 :
'From: from@xx.com \r\n' + \ #其中第一行为发件人信息;'To: to@xx.com \r\n' + \ #第二行为接收邮件用户信息;'Subject:主题 ' \r\n + \ #第三行为邮件主题;'\r\n' + \ #第四行为与邮件内容分隔的一个'\r\n';'邮件内容 ' #第五行为具体邮件内容。
- SMTP.quit()
- 断开与 smtp主机的连接 。
smtplib 发送邮件(这里要看对应服务器是否支持ssl加密,不支持就用25端口)
#发送简单的邮件.py
import smtplib
mail_host = 'smtp.qq.com' #qq邮箱服务器
from_addr = "1039821294@qq.com" #发送者用户
from_addr_passwd = "**************" #记住的密码并不是你的qq邮箱登录的密码,而是IMAP/SMTP服务,在第三方客户端登录时,密码框里的授权码:
to_addrs = ["1039821294@qq.com","1039821294@qq.com"] #接受者用户
smtp = smtplib.SMTP_SSL(mail_host,465) #连接qq邮箱服务器,端口465
smtp.set_debuglevel(2)
smtp.login(from_addr, from_addr_passwd)
content = '这是一封测试邮件!' #这里是定义发送内容的变量
for to_addr in to_addrs:
msg = 'From: %s\r\n' % from_addr + \
'To: %s\r\n' % to_addr + \
'Subject: %s\r\n' % '测试邮件' + \
'\r\n' + \
'%s' % content #记住换行要加 \
smtp.sendmail(from_addr, to_addr, msg.encode('utf-8'))运行结果:
通过 MIME标准定制邮件
MIME(Multipurpose Internet Mail Extensions)名为多用途互联网邮件扩展类型 ,可以让 可以让 我们在使用 我们在使用 我们在使用 SMTP协议进行发送邮件时,让内容更加丰富多彩。浏览器也会根据MIME格式对应支持的内容来打开一些特殊文件 , 比如图像音频HTML文件等。
- 其中 MIME Type类型 定义在邮件传输时的 Content-type Herder中,常见MIME类型格式如下:
Content-Type : type/subtype; charset='utf-8' - 其中 type对应的格式有如下:
- Text:用于 标准文本信息, 文本信息可以使多种字符集或格式的。
- Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型单独的数据
- Application:用于传输应程序数据或者二进制。
- Message:用于包装一个简单消息。
- Image:用于传输静态图片资源。
- Audio:用于传输音频 用于传输音频
- Video:用于传输视频资源
- text/plain:纯文本内容
- text/html:HTML内容
- image/gif:GIF图像
- image/jpeg:JPEG图像
- mage/png:PNG图像
- application/octet-stream:二进制数据
- application/xhtml+xml:XHTML 文档
- application/pdf:PDF文档
- application/msword:Mirosoft Word文件
- multipart/alternative:HTML邮件的 HTML形式 和纯文本形式
- application/x-www-form-urlencoded:使用 HTTP的 POST方法提交的表单
- 发送 HTML格式邮件:(常用这个)
- 发送 HTML格式邮件时,我们需要额外导入 email.mime.text模块下的 MIMEText,该类可以为我们初始化 HTML邮件数据, 之后可以很方便的通过 smtp实例进行发送 。
- email.mime.text.MIMEText(_text, _subtype='plain', _charset=None )
- _text:发送邮件的 HTML内容
- _subtype:文本类型 。
- plain:纯文本格式 纯文本格式 纯文本格式 。
- html:html格式
- _charset:邮件 HTML数据编码格式 ;为了支持中文, 常为 'utf-8'。
#发送简单的html格式邮件.py
import smtplib
from email.mime.text import MIMEText
mail_host = 'smtp.qq.com' #qq邮箱服务器
from_addr = "1039821294@qq.com" #发送者用户
from_addr_passwd = "****************" #记住的密码并不是你的qq邮箱登录的密码,而是IMAP/SMTP服务,在第三方客户端登录时,密码框里的授权码:
to_addrs = ["1039821294@qq.com","1039821294@qq.com"] #接受者用户
smtp = smtplib.SMTP_SSL(mail_host,465) #连接qq邮箱服务器,端口465
smtp.set_debuglevel(2)
smtp.login(from_addr, from_addr_passwd)
content = '<a href="http://www.python.org">>学习python使我快乐!<</a>' #这里是定义发送内容的变量
msg = MIMEText(content,'html','utf-8') #创建 MIME格式 HTML邮件
msg['From'] = from_addr #邮件内容中的发送人信息
msg['Subject'] = 'HTML邮件测试' #邮件主题
for to_addr in to_addrs:
msg['To'] = to_addr #邮件内容中的接收人信息
smtp.sendmail(from_addr, to_addr, msg.as_string())运行结果:
最新文章
- typeScence
- Struts 2的拦截器(Interceptor)总结
- Linux下提示 bash: xxx command not found
- segmentControl实现控制器的切换
- Codeforces Round #251 (Div. 2) C. Devu and Partitioning of the Array
- ABAP常用函数集锦
- VS编译的QT程序发布时产生的AppCrash问题
- .Net互操作2
- sqlserver中的rowversion
- HBASE学习笔记--概述
- Oracle查询表结构的常用语句
- 一步一步学MySQL-日志文件
- ios - 如何获取app上的数据
- koa+mysql+vue+socket.io全栈开发之数据访问篇
- 【从零开始搭建自己的.NET Core Api框架】(五)由浅入深详解CORS跨域机制并快速实现
- JumpServer 安装配置
- HDU 1162 Eddy&#39;s picture (最小生成树 prim)
- 【原创】<;Debug>; not positioned on a valid record
- 对mysql性能影响的几个重要参数---高性能(七)
- 小峰mybatis(2)mybatis传入多个参数等..
热门文章
- [HTML5] Add Semantic Styling to the Current Page of a Navigation Item with aria-current
- HDU 6125 - Free from square | 2017 Multi-University Training Contest 7
- vue中setInterval的清除
- 在Android中使用OpenGL ES进行开发第(三)节:绘制图形
- JAVA基础知识|异常
- CISCO实验记录八:ACL访问控制
- mysql —复制
- 第二章 c语言概述
- err=";etherbase address must be explicitly specified";
- redus - 队列