python基于内置模块smtplib、email实现163邮箱发送邮件(附完整代码,可直接使用)

本文主要是介绍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邮箱发送邮件(附完整代码,可直接使用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/157640

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

MyBatis-Plus逻辑删除实现过程

《MyBatis-Plus逻辑删除实现过程》本文介绍了MyBatis-Plus如何实现逻辑删除功能,包括自动填充字段、配置与实现步骤、常见应用场景,并展示了如何使用remove方法进行逻辑删除,逻辑删... 目录1. 逻辑删除的必要性编程1.1 逻辑删除的定义1.2 逻辑删php除的优点1.3 适用场景2.

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

Python+FFmpeg实现视频自动化处理的完整指南

《Python+FFmpeg实现视频自动化处理的完整指南》本文总结了一套在Python中使用subprocess.run调用FFmpeg进行视频自动化处理的解决方案,涵盖了跨平台硬件加速、中间素材处理... 目录一、 跨平台硬件加速:统一接口设计1. 核心映射逻辑2. python 实现代码二、 中间素材处

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添

Spring配置扩展之JavaConfig的使用小结

《Spring配置扩展之JavaConfig的使用小结》JavaConfig是Spring框架中基于纯Java代码的配置方式,用于替代传统的XML配置,通过注解(如@Bean)定义Spring容器的组... 目录JavaConfig 的概念什么是JavaConfig?为什么使用 JavaConfig?Jav

Java数组动态扩容的实现示例

《Java数组动态扩容的实现示例》本文主要介绍了Java数组动态扩容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1 问题2 方法3 结语1 问题实现动态的给数组添加元素效果,实现对数组扩容,原始数组使用静态分配

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建