email(简介)
模拟邮件操作。如:接收、发送功能。
email(了解)
SMTP
SMTP的全称是'SimpleMailTransferProtocol',即简单邮件传输协议。
它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。
SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。
SMTP服务器就是遵循SMTP协议的发送邮件服务器。
SMTP认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录SMTP服务器,
这就使得那些垃圾邮件的散播者无可乘之机。
增加SMTP认证的目的是为了使用户避免受到垃圾邮件的侵扰,SMTP已是事实上的E-Mail传输的标准。
POP
POP邮局协议负责从邮件服务器中检索电子邮件。
它要求邮件服务器完成下面几种任务之一:
从邮件服务器中检索邮件并从服务器中删除这个邮件;
从邮件服务器中检索邮件但不删除它;不检索邮件,只是询问是否有新邮件到达。
POP协议支持多用户互联网邮件扩展,后者允许用户在电子邮件上附带二进制文件,
如文字处理文件和电子表格文件等,实际上这样就可以传输任何格式的文件了,
包括图片和声音文件等。
在用户阅读邮件时,POP命令所有的邮件信息立即下载到用户的计算机上,
不在服务器上保留。
POP3(PostOfficeProtocol3)即邮局协议的第3个版本
是因特网电子邮件的第一个离线协议标准。
IMAP
互联网信息访问协议(IMAP)是一种优于POP的新协议。
和POP一样,IMAP也能下载邮件、从服务器中删除邮件或询问是否有新邮件,
但IMAP克服了POP的一些缺点。
例如,它可以决定客户机请求邮件服务器提交所收到邮件的方式,
请求邮件服务器只下载所选中的邮件而不是全部邮件。
客户机可先阅读邮件信息的标题和发送者的名字再决定是否下载这个邮件。
通过用户的客户机电子邮件程序,
IMAP可让用户在服务器上创建并管理邮件文件夹或邮箱、删除邮件、查询某封信的一部分或全部内容,
完成所有这些工作时都不需要把邮件从服务器下载到用户的个人计算机上。
支持种IMAP的常用邮件客户端有:ThunderMail,Foxmail,MicrosoftOutlook等。
email(参数列表)
建立MIMEMultipart物件 | MIMEMultipart() 【了解】 首先引用Python email标准函式库(Standard Library)中的MIMEMultipart类别。 MIMEMultipart类别能够让电子邮件的格式包含纯文字或(--HTML--)的内容 邮件内容使用MIMEMultipart物件的attach方法(Method)进行设定 而内容需引用MIMEText类别来建立物件 |
邮件标题 | content['subject']=“Learn Code With Mike” |
寄件者 | content['from']=“xxx@gmail.com” |
收件者 | content['to']="xxx@gmail.com" |
邮箱内容 | content.attach(MIMEText('Demo python send email')) |
验证SMTP服务器及埠号是否正确 | ehlo() |
建立TLS (Transport Layer Security)传输 | 一种网络传输安全协定,用来保护资料的安全及完整性 |
starttls() |
email(参考代码)
Easy email send
from email.mime.multipart import MIMEMultipart # 必要邮箱组件,放首要位置
from email.mime.text import MIMEText # 邮箱文本信息
from email.mime.image import MIMEImage # 邮箱图片信息
from pathlib import Path # 关于路径操作
import smtplib # 必须放入邮箱重要的东西
# @注释 /
# 1.首先-设置应用程式密码(Google)
# 2.大致流程-进入Google个人信息页面->导航栏(安全性)
# ->登录Google下方->两步验证(开启)->应用专用密码设置(意会或百度查找相关教程)
# /
content = MIMEMultipart()
content["subject"] = "<h1 style='color:yellow'>Write your email subject</h1>"
content["from"] = "My email address"
content["to"] = "Who email address"
content.attach(MIMEText("<p style='color:blue;'>Write your email content</p>"))
content.attach(MIMEImage(Path("./img.jpg").read_bytes()))
# 无需理解(照抄)
with smtplib.SMTP(host="smtp.gmail.com", port="587") as smtp:
try:
smtp.ehlo() # 验证SMTP服务器及埠号是否正确
smtp.starttls() # 网络传输安全协定
smtp.login("My email address", "应用程式密码") # 邮箱登录
smtp.send_message(content) # 发送邮箱信息
print("Complete!")
except Exception as e:
print("Error message:", e)
Add html style in email
file(demo.html)
<!--
$代表python程式码动态传入(相当于format传参)
-->
<body>
Hello<strong style="color: Red">$user</strong>
<p>your registration is success! $login</p>
<a href="https://www.baidu.com/">baidu</a>
<div style="width: 50px; height: 50px; background: rgb(2, 133, 255)"></div>
</body>
file(main.py)
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from pathlib import Path
from re import template
import smtplib
from string import Template
template = Template(Path("./demo.html").read_text())
body = template.substitute({"user": "admin", "login": "username"})
content = MIMEMultipart()
content["subject"] = "Html5 send for you"
content["from"] = "My email address"
content["to"] = "Who email address"
content.attach(MIMEText(body, "html"))
with smtplib.SMTP(host="smtp.gmail.com", port="587") as smtp:
try:
smtp.ehlo()
smtp.starttls()
smtp.login("My email address", "google应用程式密码")
smtp.send_message(content)
print("Complete!")
except Exception as e:
print("Error message:", e)
zmail(简介)
email简化版
zmail(了解)
不需要手动添加服务器地址、端口以及适合的协议,zmail 会帮你完成。
特点
- 自动寻找服务器地址以及端口
- 自动使用可靠的链接协议
- 自动将一个Python字典映射成MIME对象(带有附件的)
- 自动添加头文件以及localhostname来避免服务器拒收你的邮件
- 轻松自定义你的头文件
- 支持使用HTML作为邮件内容
zmail(参考代码)
import zmail
server = zmail.server("My email address", "yingyongchengshi password")
server.send_mail(
"who emaill address",
{
"subject": "This is a email subject",
"content_text": "This is a email content"
},
)
server.send_mail(
[
"who1 emaill adress",
"who2 emaill address"
],
{
"subject": "who1 and who2 received email subject",
"content_text": "who1 and who2 received emaill content",
},
)
latest_mail = server.get_latest()
zmail.show(latest_mail)
# 获取邮件内容(字典格式)
# latest_mail = server.get_latest()
# subject = latest_mail["subject"]
# content = latest_mail["content_text"]