45.简单邮件传输协议 SMTP
一丶简单邮件传输协议 简单邮件传输协议 简单邮件传输协议 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())运行结果:
45.简单邮件传输协议 SMTP的更多相关文章
- 简单邮件传输协议SMTP
1.SMTP是由源地址到目的地址传送邮件的一组规则,用来控制信件的中转方式. 2.SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或者中转发出的邮件,客户端通过SMTP命令与SMTP服务器进 ...
- SMTP 简单邮件传输协议
SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...
- 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识
第33章 SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...
- C#使用简单邮件传输协议(SMTP)发送邮件
1.首先引入命名空间: using System.Net.Mail; 2.定义邮件配置类: public class EmailServiceConfig { /// <summary> ...
- C#System.Net.Mail采用简单邮件传输协议发送邮件
引用: using System.Net.Mail; public class EmailHelper { public static bool SendEmail(string title, str ...
- 理解邮件传输协议(SMTP、POP3、IMAP、MIME)
http://blog.csdn.net/xyang81/article/details/7672745 电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递,就必须遵循一定的规则 ...
- POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。
我也是第一次接触这种服务,是因为我自己在做一个小小的自动推送天气情况到自己邮箱.所以才碰到这个的/ 看一下标题,我们可以先这样理解. POP3(Post Office Protocol - Versi ...
- JavaMail学习之一-邮件传输协议
协议:规定好的格式就是协议.就像http协议有请求协议和响应协议,邮件传输也分为发.收邮件的协议. 邮件协议分3种: 发邮件的:SMTP (Simple Mail Transport Protoca ...
- TCP/IP详解学习笔记(11)-- TFTP:简单文本传输协议,BOOTP:引导程序协议
1.TFTP: TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,基于UD ...
随机推荐
- myEclipse设置
字符集设置 点击菜单:window——preferences 输入:Workspace 字体大小设置 输入:colors and fonts 本机字体:14 显示行号 输入:Text Editors ...
- change([[data],fn]) 当元素的值发生改变时,会发生 change 事件。
change([[data],fn]) 概述 当元素的值发生改变时,会发生 change 事件.大理石平台价格表 该事件仅适用于文本域(text field),以及 textarea 和 select ...
- Devexpress GridControl中 repositoryItemCheckEdit作为选择列以及作为显示列的使用方法
一.在gridcontrol列表控件中使用单选框作为选择列,这里有两种方式. 方式一:选择gridcontrol控件的Run Designer按钮,添加一列,设置该列的ColumnEdit为check ...
- 用docker 下载NGINX nginx安装错误:No package nginx available
docker 内安装 nginx,提示 解决方案: 1,备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.rep ...
- Apache Kudu: Hadoop生态系统的新成员实现对快速数据的快速分析
A new addition to the open source Apache Hadoop ecosystem, Apache Kudu completes Hadoop's storage la ...
- POJ 1051 Jury Compromise ——(暴力DP)
题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =.估计又是哪里小细节写错了QAQ..思路是用dp[i][j]表示已经选了i个,差值为j的最大和.转移的话暴力枚 ...
- 本地项目文件通过git提交到GitHub上
参考:https://blog.csdn.net/kongying19910218/article/details/50515834 步骤: 1.初始化git,假如我们要提交test文件夹下的所有目录 ...
- Spring boot 配置 Tomcat 临时文件缓存目录
1. 问题现象 spring boot 项目中,Tomcat 接收到 content-type 为 multipart/form-data 的请求时,需要将接收的文件缓存到临时目录(默认下载 /tmp ...
- Flutter移动电商实战 --(35)列表页_上拉加载更多制作
右侧列表上拉加载配合类别的切换 上拉加载需要一个page参数,当点击大类或者小类的时候,这个page就要变成1 provide内定义参数 首先我们需要定义一个page的变量 下图是我们之前在首页的时候 ...
- The problem is now the wait_for_fds() example function: it will call something like select(), poll() or the more modern epoll() and kqueue().
小结: 1.线程与惊群效应 Serializing accept(), AKA Thundering Herd, AKA the Zeeg Problem — uWSGI 2.0 documentat ...