python yeah 邮箱发邮件
设置
先理一下常见的电子邮件协议: SMTP、POP、IMAP 都遵循TCP/IP协议规范。至于Exchange是邮件服务器,不是收邮件和发邮件的协议,不要混淆概念,一般情况下不用,因为它是微软的产品。
- SMTP:即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。简单来说是 发送协议。
- POP:协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上。属于 收件协议。
- IMAP:提供 邮件服务器 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作(这是和POP协议主要不同点)。属于 收件协议。
代码
import smtplib
from email.mime.text import MIMEText
def send_mail(subject: str, content: str, receiver: list, cc: list, _type='plain') -> bool:
"""
发邮件
:param subject: 邮件主题
:param content: 邮件内容
:param receiver: 接收者,多个用逗号分格
:param cc: 抄送人, 多个用逗号分格
:param _type: 邮件格式, 默认为文本格式, 可选值 html
:return: 发送结果
"""
# 使用的是yeah的smtp服务器地址
_mail_host = "smtp.yeah.net"
# 用户名
_user = "xxxx@yeah.net"
# 授权密码
_password = xxxxx"
try:
msg = MIMEText(content, _subtype=_type, _charset='utf-8')
msg['Subject'] = subject
# 发件人显示,不起实际作用
msg["from"] = _user
# 收件人显示,不起实际作用
msg["to"] = ','.join(receiver)
# 抄送人显示,不起实际作用
msg["Cc"] = ','.join(cc)
with smtplib.SMTP_SSL(host=_mail_host, port=465) as smtp:
# 登录发邮件服务器
smtp.login(user=_user, password=_password)
# 实际发送、接收邮件配置
smtp.sendmail(from_addr=_user, to_addrs=receiver, msg=msg.as_string())
return True
except Exception as e:
print(111, e)
return False
if __name__ == '__main__':
aa = """
<H3>Hi</H3>:
清华,你好,我是测试邮件,我试一下效果。
"""
r = ['xxxx@yeah.net']
send_mail('我是测试邮件', aa, r, [], 'html')
代码中的密码为授权密码,设置方式见下图
效果
常见的邮箱IMAP/POP3/SMTP 设置及端口号
https://www.bbsmax.com/A/pRdBy1Qa5n/