知识背景:
首先,你要知道,你申请邮箱之后用邮箱来收发电子邮件,电子邮件并不是存在你本地的电脑上的,而是存在邮箱服务提供商的数据中心里,如下图所示
你的邮箱账号和密码就是用来登陆 Gmail 或者 QQ 邮箱的邮箱服务器的
而在这些服务器集群里,会跑着 IMAP 服务器和 SMTP 服务器
当接收邮件时,情况如下图所示
用户接收邮件时,可以通过 Web 界面来登录邮箱并阅读邮件,也可以通过第三方邮件客户端,包括但不限于 Outlook,Foxmail,Mutt等来收取,而第三方客户端与邮件服务器通信时遵守的协议就是 IMAP
通过 IMAP 协议,第三方客户端可以下载邮件头或者邮件全文到本地,如上图中箭头所示
以前也有用 POP3 协议的,至于 POP3 与 IMAP 的区别不是重点就暂时不写了
当发送邮件时,情况如下图所示
比如使用 Gmail 的用户 A 要给使用 QQ 邮箱的用户 B 发送一封电子邮件,那么流程如下:
首先 A 与 Gmail 的 SMTP 服务器通信,将邮件标题、内容、收件人邮件地址等信息发送至 Gmail 的 SMTP 服务器
然后,Gmail 的 SMTP 将该封邮件投递至 QQ 邮箱的 SMTP 服务器
B 收到 QQ 邮箱的提醒,通过 IMAP 协议收取该封邮件
所以,不管是用户向邮件服务器发送邮件信息,还是邮件服务器向另一台邮件服务器发送邮件信息,都需要走 SMTP 协议
#coding: utf-8
from email.mime.text import MIMEText
import smtplib
mail_content = "This is a content of the mail"
try:
content = MIMEText(mail_content, 'plain', 'utf-8') # 第一个参数:邮件的内容;第二个参数:邮件内容的格式,普通的文本,可以使用:plain,如果想使内容美观,可以使用:html;第三个参数:设置内容的编码,这里设置为:utf-8
reveivers = "[email protected],[email protected]"
content['To'] = reveivers # 设置邮件的接收者,多个接收者之间用逗号隔开
content['From'] = str("[email protected]") # 邮件的发送者,最好写成str("这里填发送者"),不然可能会出现乱码
content['Subject'] = "这是一封测试邮件" # 邮件的主题
##############使用qq邮箱的时候,记得要去开启你的qq邮箱的smtp服务;##############
# 方法:
# 1)登录到你的qq邮箱;
# 2)找到首页顶部的【设置】并点击;
# 3)找到【账户】这个选项卡并点击,然后在页面中找到“SMTP”相关字样,找到【开启】的超链接,点击后会告诉你开启方法(需要发个短信),然后按照指示操作,最终会给你一个密码,这个密码可以用于在代码中当作邮箱密码
# 注意!!!:163邮箱之类的不知道要不要这些操作,如果是163邮箱你可以忽略此步骤
###########################################################################
smtp_server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 第一个参数:smtp服务地址(你发送邮件所使用的邮箱的smtp地址,在网上可以查到,比如qq邮箱为smtp.qq.com) 第二个参数:对应smtp服务地址的端口号
smtp_server.login("xxx0", "****************") # 第一个参数:发送者的邮箱账号 第二个参数:对应邮箱账号的密码
#################################
smtp_server.sendmail("[email protected]", ["[email protected]" ,"[email protected]"], content.as_string()) # 第一个参数:发送者的邮箱账号;第二个参数是个列表类型,每个元素为一个接收者;第三个参数:邮件内容
smtp_server.quit() # 发送完成后加上这个函数调用,类似于open文件后要跟一个close文件一样
except Exception as e:
print str(e)
资料参考:https://www.zhihu.com/question/27287653