一、获取发送者163邮箱授权密码
第一步 登录邮箱
https://mail.163.com/
第二步 点击右上角切换回旧版
...新版实在没找到在哪
![](https://img-blog.csdnimg.cn/afd36535ad484f9aade5911bacfeaaf9.png)
第三步 打开 POP3/SMTP/IMAP 设置
![](https://img-blog.csdnimg.cn/d2ff2b1f70f444acad32474cb6d97c66.png)
第四步 开启POP3/SMTP服务
![](https://img-blog.csdnimg.cn/3bd47a43724b40728063dad98bca8abf.png)
第五步 拿到授权密码
![](https://img-blog.csdnimg.cn/eb549021b1024c439f09bda6e9d6d55e.png)
第六步 记录服务器地址
在页面的最下方
![](https://img-blog.csdnimg.cn/0f3b759bf2454213a9e6fc7fd2b4cc28.png)
二、编码
1、导入库
import smtplib
# 导入smplip
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
2、__init__.py
def __init__(self, recipient: str, sender: str = sender, password: str = password,
serverAddress: str = serverAddress):
"""
recipient: 接收者邮箱
sender: 发送者邮箱
password: 发送者授权码(写刚才拿到的授权码)
serverAddress: 服务器地址(写刚才拿到的服务器地址)
"""
self.sender = sender # 发送者邮箱
self.password = password # 授权码
self.recipient = recipient # 接收者邮箱
self.serverAddress = serverAddress # 服务器地址
3、编辑邮件内容
@staticmethod
def message(title: str, text: str, sender: str, recipient: str, types: str = "plain", name: str = None,
file: str = None):
"""
title: 邮件标题
text: 邮件正文
types: 文本格式 plain(纯文本)/html(html代码)
sender: 发送者邮箱
recipient: 接收者邮箱
name: 自定义邮件名称
file: 附件路径
"""
# 判断有没有传入文件
if file:
message = MIMEMultipart()
# 这里的三个参数:第一个为文本内容,第二个文本格式 plain(纯文本)/html(html代码),第三个 utf-8 设置编码
message.attach(MIMEText(text, types, 'utf-8'))
att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = f'attachment; filename="{file}"' # 设置文件名称
message.attach(att1)
else:
# 这里的三个参数:第一个为文本内容,第二个文本格式 plain(纯文本)/html(html代码),第三个 utf-8 设置编码
message = MIMEText(text, types, 'utf-8')
message['To'] = Header(recipient) # 接收者
message['From'] = Header(formataddr((name, sender), "utf-8")) # 接收者
message['Subject'] = Header(title, 'utf-8') # 设置标题
return message
4、建立连接,发送邮件
def send(self, title: str, text: str, types: str = "plain", name: str = None, file: str = None, ):
"""
title: 邮件标题
text: 邮件正文
types: 文本格式 plain(纯文本)/html(html代码)
name : 自定义邮件名称
file: 附件路径
"""
try:
print("邮件发送中..")
mtpObj = smtplib.SMTP_SSL(self.serverAddress)
# 建立连接
mtpObj.connect(self.serverAddress, 587)
# 登录--发送者账号和口令
mtpObj.login(self.sender, self.password)
# 调用函数编辑发送信息
message = self.message(title, text, self.sender, self.recipient, types=types, name=name,
file=file, )
# 发送邮件
mtpObj.sendmail(self.sender, self.recipient, message.as_string())
print("邮件发送成功")
mtpObj.quit()
except smtplib.SMTPException:
print("无法发送邮件")
5、实例化
if __name__ == '__main__':
# 实例化对象,传入接收者邮箱参数recipient
p1 = sendEmail(recipient="XXXX@163.com")
title = "这是一条来自地狱的邀请书,快来看看吧~"
# 如果文本格式选html text需要传html代码,比如:<p>我爱中国</p>
text = "像你这样的新生命体竟然还能在地球上活这么多年!不得不佩服佩服天朝,林大了什么鸟都有啊!"
p1.send(title=title, text=text, name="地狱邀请书", file='test.txt')
"""
send参数说明:
title: 必传 邮件标题
text: 必传 邮件正文
types: 选传 文本格式 plain(纯文本)/html(html代码) 默认为plain
name : 选传 自定义邮件名称
file: 选传 附件路径
"""
完整代码
代码已经封装好,基本功能已经实现,完成第一部分的内容后,根据参数说明传入参数即可使用,有特殊需要的(比如html格式里插入图片、上传多个附件等)可以自己再研究一下。https://www.runoob.com/python/python-email.html
import smtplib
# 导入smplip
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
from email.mime.multipart import MIMEMultipart
class sendEmail:
def __init__(self, recipient: str, sender: str = "XXX@163.com", password: str = "ZZZZZZZZZ",
serverAddress: str = 'smtp.163.com'):
"""
recipient: 接收者邮箱
sender: 发送者邮箱
password: 发送者授权码
serverAddress: 服务器地址
"""
self.sender = sender # 发送者邮箱
self.password = password # 授权码
self.recipient = recipient # 接收者邮箱
self.serverAddress = serverAddress # 服务器地址
@staticmethod
def message(title: str, text: str, sender: str, recipient: str, types: str = "plain", name: str = None,
file: str = None):
"""
title: 邮件标题
text: 邮件正文
types: 文本格式 plain(纯文本)/html(html代码)
sender: 发送者邮箱
recipient: 接收者邮箱
name: 自定义邮件名称
file: 附件路径
"""
if file:
message = MIMEMultipart()
# 这里的三个参数:第一个为文本内容,第二个文本格式 plain(纯文本)/html(html代码),第三个 utf-8 设置编码
message.attach(MIMEText(text, types, 'utf-8'))
att1 = MIMEText(open(file, 'rb').read(), 'base64', 'utf-8')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = f'attachment; filename="{file}"' # 设置文件名称
message.attach(att1)
else:
# 这里的三个参数:第一个为文本内容,第二个文本格式 plain(纯文本)/html(html代码),第三个 utf-8 设置编码
message = MIMEText(text, types, 'utf-8')
message['To'] = Header(recipient) # 接收者
message['From'] = Header(formataddr((name, sender), "utf-8")) # 接收者
message['Subject'] = Header(title, 'utf-8') # 设置标题
return message
def send(self, title: str, text: str, types: str = "plain", name: str = None, file: str = None, ):
"""
title: 邮件标题
text: 邮件正文
types: 文本格式 plain(纯文本)/html(html代码)
name : 自定义邮件名称
file: 附件路径
"""
try:
print("邮件发送中..")
mtpObj = smtplib.SMTP_SSL(self.serverAddress)
# 建立连接
mtpObj.connect(self.serverAddress, 587)
# 登录--发送者账号和口令
mtpObj.login(self.sender, self.password)
# 设置发送信息
message = self.message(title, text, self.sender, self.recipient, types=types, name=name,
file=file, )
# 发送邮件
mtpObj.sendmail(self.sender, self.recipient, message.as_string())
print("邮件发送成功")
mtpObj.quit()
except smtplib.SMTPException:
print("无法发送邮件")
if __name__ == '__main__':
# 实例化对象,传入接收者邮箱参数recipient
p1 = sendEmail(recipient="xxxxx@163.com")
title = "这是一条来自地狱的邀请书,快来看看吧~"
text = "像你这样的新生命体竟然还能在地球上活这么多年!不得不佩服佩服天朝,林大了什么鸟都有啊!"
p1.send(title=title, text=text, name="地狱邀请书")
"""
send参数说明:
title: 必传 邮件标题
text: 必传 邮件正文
types: 选传 文本格式 plain(纯文本)/html(html代码) 默认为plain
name : 选传 自定义邮件名称
file: 选传 附件路径
"""
Everything is going smoothly.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)