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

2023-05-16

一、获取发送者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、编辑邮件内容

@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(使用前将#替换为@)

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

随机推荐

  • H5 使用微信开放标签跳转小程序

    微信开放标签是微信公众平台面向网页开发者提供的扩展标签集合 xff0c 可以在网页上提供跳转小程序 打开 App 等能力 本文梳理使用微信开放标签跳转小程序的过程 xff0c 以备日后查阅 参考链接 1 开放标签说明文档 准备已认证的服务号
  • @Autowired和构造方法执行的顺序解析

    先看一段代码 xff0c 下面的代码能运行成功吗 xff1f span class hljs annotation 64 Autowired span span class hljs keyword private span User us
  • 腾讯视频客户端导出MP4格式

    腾讯视频下载下来之后是 qlv格式 xff0c 这种格式只能使用客户端播放 感觉挺蛋疼的 xff0c Mp4好不容易让各种设备都可以统一播放视频了 xff0c 这样一搞感觉又倒退了几十年 xff0c 关键的是 xff0c 有些资源是腾讯独家
  • Anaconda安装及配置python虚拟环境

    近期需要在多个场景下进行实验 xff0c 而不同场景的测试脚本所需的环境配置不同 xff0c 所以疲于在服务器上配置不同的环境 因为这个成功地被mentor喷了个半死 xff0c 在mentor的提示下才想起配置虚拟环境这回事 xff08
  • ThreeJS 开发实例

    形状和材质 虚线 画虚线 xff1a function DrawDashLine span class hljs keyword var span geometry 61 span class hljs keyword new span T
  • Threejs性能监视和可视化控制

    概述 性能监视是监视threejs运行中的刷新频率 xff0c 要使用到threejs提供的stat js xff0c 可视化控制是在窗口中显示一个可见的控制框 xff0c 可以通过鼠标改变其中的值 xff0c 达到改变threejs对象参
  • threejs加载3D模型例子

    加载3D模型 首先要引入ColladaLoader加载器 xff0c Collada是一个3D模型交换方案 xff0c 即不同的3D模型可以通过Collada进行相互转换 xff0c 言外之意 xff0c threejs可以使用Collad
  • threejs坐标转换

    屏幕坐标转three js坐标 将屏幕坐标转变成threejs空间坐标 xff1a span class hljs function span class hljs keyword function span span class hljs
  • 搭建GitLab+Jenkins持续集成环境图文教程

    GitLab是一个代码仓库 xff0c 用来管理代码 Jenkins是一个自动化服务器 xff0c 可以运行各种自动化构建 测试或部署任务 所以这两者结合起来 xff0c 就可以实现开发者提交代码到GitLab xff0c Jenkins以
  • threejs-经纬度转换成xyz坐标的方法

    用threejs做3D应用时 xff0c 很经常会接触到球状物体 xff0c 比如说地球 xff0c 要定义球上的一点 xff0c 用经纬度是常用的办法 现在 xff0c 我们要在北京这个地方标一个点 xff0c 北京的坐标为 北纬39 9
  • HTML5 响应式图片

    现在上网设备越来越多 xff0c 各种设备的屏幕千差万别 xff0c 如果只用一张图片去涵盖所有的设备 xff0c 一是可能会造成某些设备上显示效果不佳 xff0c 比如使用了一张低清晰度的图 xff0c 而网页运行在一个高清大屏里 xff
  • 使用EventBus通讯不成功

    最近在开发一个直播app的项目 xff0c 遇到一个需求是当用户点击 退出登录 这个操作时 xff0c 回到登录界面 xff0c 让用户重新登录 这个需求实现起来一点都不难 xff0c 不就是点击退出登录后 xff0c Intent到Log
  • 怎么使用CTreeListCtrl

    代码路径 xff1a http www codeproject com KB tree ctreelistctrl aspx 1 怎么在CTreeListCtrl中使用edit或者combobox 例如双击修改某个item 重载OnLBut
  • android backtrace实现

    前景 backtrace 文档 说明 通过数组获取调用栈 一般获取的是内存地址 借助dladdr获取地址信息 计算可执行文件中的偏移地址 实现 有的没有实现backtrace但是大多都支持unwind 利用unwind实现类似 backtr
  • 【详细教程】阿里云ECS服务器搭建

    一 服务器搭建的网址入口 xff1a 如果您之前没有用过 xff0c 恭喜您 xff0c 是有试用资格的 有试用资格 xff1a 点击进入阿里云云产品试用中心 xff0c 选择下图产品 xff0c 点击试用30天 如果未注册 xff0c 需
  • Matlab绘图-详细,全面(二维&三维等)

    原文 Matlab绘图 xff08 图像为本人所绘 xff09 强大的绘图功能是Matlab的特点之一 xff0c Matlab提供了一系列的绘图函数 xff0c 用户不需要过多的考虑绘图的细节 xff0c 只需要给出一些基本参数就能得到所
  • SpotBugs-IDE插件扫描

    安装 在 Intellij IDE 的Plugins中搜索 SpotBugs 并 安装 设置 打开IDE Settings xff0c 选择 Tools SpotBugs 根据实际情况进行配置 比如选择分析投入 xff0c 分析等级 xff
  • 【C语言】vsnprintf函数的使用

    标题 C语言 vsnprintf函数的使用 提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 标题 C语言 vsnprintf函数的使用前言一 vsnprintf是什么 xff1
  • [python]编写程序产生 ISBN 号的校验位。

    64 MADE BY YWL XJTU python编写程序产生 ISBN 号的校验位 编写程序产生 ISBN 号的校验位 任何新出版的图书都配有 ISBN 号 xff0c 2007 年以前是由 10 位数字加上3个连字符组成的 ISBN
  • python基于内置模块smtplib、email实现163邮箱发送邮件(附完整代码,可直接使用)

    一 获取发送者163邮箱授权密码 第一步 登录邮箱 https mail 163 com 第二步 点击右上角切换回旧版 新版实在没找到在哪 第三步 打开 POP3 SMTP IMAP 设置 第四步 开启POP3 SMTP 服务 第五步 拿到