案例v12链接:https://blog.csdn.net/weixin_42394170/article/details/96438969
起源
管理程序
参考资料
MUA(MailUserAgent)邮件用户代理
MTA(MailTransferAgent)邮件传输代理
MDA(MailDeliveryAgent)邮件投递代理
[email protected], 老师,北京海淀
[email protected], 学生,上海江岸区
流程
编写程序
准备工作
Python for mail
SMTP协议负责发送邮件
使用email模块构建邮件
HTML格式邮件发送
发送带附件的邮件
添加邮件头, 抄送等信息
同时支持html和text格式
使用smtplib模块发送邮件
POP3协议接收邮件
###由于代码过长,将分几篇文章展示
**v07**
# 导入相应的包
import smtplib
from email.mime.text import MIMEText
# MIMEText三个主要参数
# 1. 邮件内容
# 2. MIME子类型,在此案例我们用plain表示text类型
# 3. 邮件编码格式
msg = MIMEText("Hello, i study in NJUPT ", "plain", "utf-8")
# 发送email地址,此处地址直接使用我的qq有偶像,密码一般需要临时输入,此处偷懒
from_addr = "[email protected]"
# 此处密码是经过申请设置后的授权码,不是不是不是你的qq邮箱密码
from_pwd = "hjpovygcxmrshhcj"
# 收件人信息
# 此处使用qq邮箱,我给自己发送
to_addr = "[email protected]"
# 输入SMTP服务器地址
# 此处根据不同的邮件服务商有不同的值,
# 现在基本任何一家邮件服务商,如果采用第三方收发邮件,都需要开启授权选项
# 腾讯qq邮箱所的smtp地址是 smtp.qq.com
smtp_srv = "smtp.qq.com"
try:
# 两个参数
# 第一个是服务器地址,但一定是bytes格式,所以需要编码
# 第二个参数是服务器的接受访问端口
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465) #SMTP协议默认端口25
#登录邮箱发送
srv.login(from_addr, from_pwd)
# 发送邮件
# 三个参数
# 1. 发送地址
# 2. 接受地址,必须是list形式
# 3. 发送内容,作为字符串发送
srv.sendmail(from_addr, [to_addr], msg.as_string())
srv.quit()
except Exception as e:
print(e)
**v08**
import smtplib
from email.mime.text import MIMEText
mail_content = """
Title
这是一封HTML格式邮件
"""
msg = MIMEText(mail_content, "html", "utf-8")
# 构建发送者地址和登录信息
from_addr = "[email protected]"
from_pwd = "hjpovygcxmrshhcj"
# 构建邮件接受者信息
to_addr = "[email protected]"
smtp_srv = "smtp.qq.com"
try:
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
srv.login(from_addr, from_pwd)
srv.sendmail(from_addr, [to_addr], msg.as_string())
srv.quit()
except Exception as e:
print(e)
**v09**
from email.mime.text import MIMEText #构建附件使用
from email.mime.multipart import MIMEBase, MIMEMultipart # 构建基础邮件使用
mail_mul = MIMEMultipart()
# 构建邮件正文
mail_text = MIMEText("Hello, i am liudana", "plain", "utf-8")
# 把构建好的邮件正文附加入邮件中
mail_mul.attach(mail_text)
# 构建附加
# 构建附件,需要从本地读入附件
# 打开一个本地文件
# 以rb格式打开
with open("02.html", "rb") as f:
s = f.read()
# 设置附件的MIME和文件名
m = MIMEText(s, 'base64', "utf-8")
m["Content-Type"] = "application/octet-stream"
# 需要注意,
# 1. attachment后分好为英文状态
# 2. filename 后面需要用引号包裹,注意与外面引号错开
m["Content-Disposition"] = "attachment; filename='02.html'"
# 添加到MIMEMultipart
mail_mul.attach(m)
# 发送email地址,此处地址直接使用我的qq有偶像,密码一般需要临时输入,此处偷懒
from_addr = "[email protected]"
# 此处密码是经过申请设置后的授权码,不是不是不是你的qq邮箱密码
from_pwd = "hjpovygcxmrshhcj"
# 收件人信息
# 此处使用qq邮箱,我给自己发送
to_addr = "[email protected]"
# 输入SMTP服务器地址
# 此处根据不同的邮件服务商有不同的值,
# 现在基本任何一家邮件服务商,如果采用第三方收发邮件,都需要开启授权选项
# 腾讯qq邮箱所的smtp地址是 smtp.qq.com
smtp_srv = "smtp.qq.com"
try:
import smtplib
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465) #SMTP协议默认端口25
#登录邮箱发送
srv.login(from_addr, from_pwd)
# 发送邮件
# 三个参数
# 1. 发送地址
# 2. 接受地址,必须是list形式
# 3. 发送内容,作为字符串发送
srv.sendmail(from_addr, [to_addr], mail_mul.as_string())
srv.quit()
except Exception as e:
print(e)
**v10**
from email.mime.text import MIMEText
from email.header import Header
msg = MIMEText("Hello wold", "plain", "utf-8")
# 下面代码故意写错,说明,所谓的发送者的地址,只是从一个Header的第一个参数作为字符串构建的内容
# 用utf8编码是因为很可能内容包含非英文字符
header_from = Header("从图灵学院邮箱发出去的" , "utf-8")
msg['From'] = header_from
# 填写接受者信息
header_to = Header("去王晓静的地方" , 'utf-8')
msg['To'] = header_to
header_sub = Header("这是图灵学院的主题", 'utf-8')
msg['Subject'] = header_sub
# 构建发送者地址和登录信息
from_addr = "[email protected]"
from_pwd = "hjpovygcxmrshhcj"
# 构建邮件接受者信息
to_addr = "[email protected]"
smtp_srv = "smtp.qq.com"
try:
import smtplib
srv = smtplib.SMTP_SSL(smtp_srv.encode(), 465)
srv.login(from_addr, from_pwd)
srv.sendmail(from_addr, [to_addr], msg.as_string())
srv.quit()
except Exception as e:
print(e)
**v11**
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# 构建一个MIMEMultipart邮件
msg = MIMEMultipart("alternative")
# 构建一个HTML邮件内容
html_content = """
Title
这是一封HTML格式邮件
"""
#
msg_html = MIMEText(html_content, "html", "utf-8")
msg.attach(msg_html)
msg_text = MIMEText("just text content", "plain", "utf-8")
msg.attach(msg_text)
# 发送email地址,此处地址直接使用我的qq邮箱,密码临时输入
from_addr = "[email protected]"
#from_pwd = input('163邮箱密码: ')
from_pwd = "hjpovygcxmrshhcj"
# 收件人信息:
# 此处使用我注册的163邮箱
to_addr = "[email protected]"
# 输入SMTP服务器地址:
# 此地址根据每隔邮件服务商有不同的值,这个是发信邮件服务商的smtp地址
# 我用的是qq邮箱发送,此处应该填写腾讯qq邮箱的smtp值,即smtp.163.com,
# 需要开启授权码,
smtp_srv = "smtp.qq.com"
try:
import smtplib
# 加密传输
#server = smtplib.SMTP_SSL(smtp_srv.encode(), 465) # SMTP协议默认端口是25
# qq邮箱要求使用 TLS加密传输
server = smtplib.SMTP(smtp_srv.encode(), 25) # SMTP协议默认端口是25
server.starttls()
# 设置调试级别
# 通过设置调试等级,可以清楚的看到发送邮件的交互步骤
server.set_debuglevel(1)
# 登录发送邮箱
server.login(from_addr, from_pwd)
server.sendmail(from_addr, [to_addr], msg.as_string())
server.quit()
except Exception as e:
print(e)