什么是POP3、SMTP和MAP?
POP3是Post Office Protocol 3的简称,即邮局协议的第三个版本,他是规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它是因特网电子邮件的第一个离线协议的标准。POP3允许用户从服务器上把邮件存储到本地计算机上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接受邮件服务器,用来接受电子邮件。
SMTP的全称是Simple Mail Transfer Protocol,即简单的邮件传输协议。它是一组用于从源地址到目的地的地址传输邮件的规范,通过它控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或者中转信件时找到下个目的地。SMTP服务器就是遵循SMTP协议的发送邮件服务器。
SMTP认证,简单来说就是要求必须在提供了账户名和密码之后才能登陆SMTP服务器。
IMAP全称是Iternet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似的邮件访问标准协议之一。不同的是,开启了IMAP后,你在电子邮件客户端收取的邮件仍然保存在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件、标记邮件等,服务器上的邮件也会做相应的动作。无论从浏览器登陆还是客户端登陆邮箱看到的邮件以及状态都是一致的。
我们使用网易的163邮箱来发送邮件,所以我们需要先将163邮箱的POP3/SMTP/IMAP都给打开。
具体步骤是:设置->POP3/SMTP/IMAP->设置POP3/SMTP/IMAP,点击复选框时邮箱会要求你设置授权码,设置授权码,然后一定要将授权码给记住,后面会用到。邮箱设置好后我们就开始编写代码发送邮件。
首先引入我们需要导入的库及包
import smtplib import email # MIME 多邮件扩充协议 from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart
然后设置邮箱的域名,端口,发送者邮箱,接收者邮箱
host = 'smtp.163.com' # 使用163邮箱 port = '465' # 163邮箱服务器的端口号 sender = 'xxxxxx@163.com' # 发送者的邮箱 password = 'xxxxxx' # 授权码 receiver = 'xxxxxx' # 接收者的邮箱,可以为其他类型的邮箱,如果是多个接收者请传入列表
接下来构建文本邮箱的主体
body = 'xxx' # 你要发送的邮件的内容 subject = 'xxx' # 你要发送的邮件的标题 # plain表示邮件内容的类型,文本类型默认是plain。utf-8表示内容的编码格式。 message = MIMEText(body, 'plain', 'utf-8') message['From'] = sender # 发送者 message['To'] = receiver # 接收者 message['Subject'] = subject # 邮件标题
接下来我们获取SMTP协议的证书,登陆我们的邮箱发送邮件
# 获取SMTP协议证书 email_clint = smtplib.SMTP_SSL(host, port) # 登陆邮箱,这里也是用授权码登陆邮箱的 login_result = email_clint.login(sender, password) # 发送邮件 email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string()) # 关闭邮件发送客户端 email_client.close()
其实这里我们可以打印login_result,如果返回的状态码是235则证明邮件发送成功。
下面是发送文本邮件的全部代码。
import email import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart class SendEmail(object): def __init__(self): self.host = 'smtp.163.com' self.port = '465' self.sender = 'xxxxxx@163.com' self.password = 'xxxxxx' def send_email(self, receiver, subject='', body=''): message = MIMEText(body, 'plain', 'utf-8') message['From'] = self.sender message['To'] = receiver message['Subject'] = subject try: email_clint = smtplib.SMTP_SSL(self.host, self.port) print('获取证书成功') login_result = email_clint.login(self.sender, self.password) print('开始登陆') if login_result[0] == 235: print('登陆成功') email_clint.sendmail(self.sender, receiver, message.as_string()) print('邮件发送成功') else: print('登陆失败') except Exception as e: print('发生错误', e)
下面介绍发送HTML格式内容的邮件以及向邮件内容中添加图片。
其实发送HTML格式内容的邮件很简单,只需将发送邮件的内容格式改为html就行了,像这样
message = MIMEText('<h2 style="color">学习使我快乐</h2>', 'html', 'utf-8')
还有使用内嵌的方法向邮件内容中加入文本或者图片
# related 表示使用内嵌资源的形式,将邮件发送给对方 message = MIMEMultipart('related')
然后向邮件中添加内容,如果把图片嵌入到邮件正文中只需在HTML中通过引用src="cid:x"即可。x代表图片的编号可以是数字也可是是字符串
# ---------------发送文本----------------- message_html = MIMEText('<h2 style="color:red;font-size:100px">学习使我快乐</h2><img src="cid:small">','html','utf-8') # 将邮件内容 装入到邮件信息当中去 message.attach(message_html) # ---------------发送图片----------------- # rb 读取二进制文件(图片是二进制文件) image_data = open('1.gif','rb') # 设置读取获取的二进制数据 message_image = MIMEImage(image_data.read()) # 关闭刚才打开的文件 image_data.close() message_image.add_header('Content-ID','small') # 添加图片文件到邮件信息当中去 message.attach(message_image)
然后构建邮件的主体,发送邮件即可
message['From'] = sender # 发送者 message['To'] = receiver # 接收者 message['Subject'] = subject # 邮件标题 email_clint = smtplib.SMTP_SSL(host, port) login_result = email_clint.login(sender, password) email_clent.sendmail(from_addr=sender, to_addrs=receiver, msg=message.as_string()) email_client.close()
我们经常会向邮件中添加附件,下面介绍添加附件的方式
添加附件也是使用内嵌的方式添加的
# 对二进制文件需要设置默认的编码形式 # 对于MIMEText()来说 默认的编码形式就是base64 # 如果对于二进制文件来说 没有设置base64进行编码 则附件的就会呈现乱码 # --------------------添加图片附件---------------------- message_image = MIMEText(open('1.gif','rb').read(),'base64','utf-8') # 设置附件在邮件中的名字 message_image['Content-disposition'] = 'attachment;filename="happy.gif"' message.attach(message_image) # --------------------添加xlsx表格附件--------------- message_xlsx = MIMEText(open('table.xlsx','rb').read(),'base64','utf-8') # 设置附件在邮件当中的名字 message_xlsx['Content-Disposition'] = 'attachment;filename="test.xlsx"' message.attach(message_xlsx)
然后发送邮件即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍python实现发送邮件功能,包括了python实现发送邮件功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现发送邮件功能的具体代码,供大家参考,具体内容如下 依赖: Python代码实现发送邮件,使用的模块是smtplib、MIMEText,实现代码之前需要导入包: 使用163邮件发送邮件,具体代码实现如下: 163邮箱的授权码获取方法如下: 1.
本文向大家介绍Python smtplib实现发送邮件功能,包括了Python smtplib实现发送邮件功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Python smtplib发送邮件功能的具体代码,供大家参考,具体内容如下 解决之前版本的问题,下面为最新版 配置文件emailConfig.ini 路径要与程序对应 之前版本出现的问题: 已测试通过,使用Header并没有变
本文向大家介绍python发送邮件功能实现代码,包括了python发送邮件功能实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python发邮件精简代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍python实现发送邮件功能代码,包括了python实现发送邮件功能代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现发送邮件功能的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍Python实现自动发送邮件功能,包括了Python实现自动发送邮件功能的使用技巧和注意事项,需要的朋友参考一下 简单邮件传输协议(SMTP)是一种协议,用于在邮件服务器之间发送电子邮件和路由电子邮件。Python提供smtplib模块,该模块定义了一个SMTP客户端会话对象,可用于使用SMTP或ESMTP侦听器守护程序向任何互联网机器发送邮件。 SMTP通讯的基本流程可以概括为以下
本文向大家介绍python实现发送邮件及附件功能,包括了python实现发送邮件及附件功能的使用技巧和注意事项,需要的朋友参考一下 今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如果没有错误,表示已经安装成功。 Python发送一个未知MIME类型