本文主要是介绍python基于内置模块smtplib、email实现163邮箱发送邮件(附完整代码,可直接使用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、获取发送者163邮箱授权密码
第一步 登录邮箱
https://mail.163.com/
第二步 点击右上角切换回旧版
...新版实在没找到在哪
第三步 打开 POP3/SMTP/IMAP 设置
第四步 开启POP3/SMTP服务
第五步 拿到授权密码
第六步 记录服务器地址
在页面的最下方
二、编码
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、编辑邮件内容
@staticmethoddef 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__':# 实例化对象,传入接收者邮箱参数recipientp1 = 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代码) 默认为plainname : 选传 自定义邮件名称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 MIMEMultipartclass 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 # 服务器地址@staticmethoddef 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 messagedef 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__':# 实例化对象,传入接收者邮箱参数recipientp1 = sendEmail(recipient="xxxxx@163.com")title = "这是一条来自地狱的邀请书,快来看看吧~"text = "像你这样的新生命体竟然还能在地球上活这么多年!不得不佩服佩服天朝,林大了什么鸟都有啊!"p1.send(title=title, text=text, name="地狱邀请书")"""send参数说明:title: 必传 邮件标题text: 必传 邮件正文types: 选传 文本格式 plain(纯文本)/html(html代码) 默认为plainname : 选传 自定义邮件名称file: 选传 附件路径"""
Everything is going smoothly.
这篇关于python基于内置模块smtplib、email实现163邮箱发送邮件(附完整代码,可直接使用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!