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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象