【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

目录

本系列文章为参与【Python】CSDN21天学习挑战赛 ,成为更好的自己,根据自身的学习进度并记录自己的学习过程。我也是Python纯小白,和大家一起学习,保持热爱学习的好习惯😁

活动地址:CSDN21天学习挑战赛

; 一、邮箱注册

注册网易邮箱,其他邮箱也支持的,我这里以网易为例,都差不多

二、邮箱设置

服务开启

1.注册后登录邮箱,选择我们设置

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

2.找到我们的POP3/SMTP/IMAP

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

3.需要开启我们的IMAP/SMTP服务和POP3/SMTP服务

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛
提示:如果服务默认是开启的,但是不知道授权码,可以选择新增,或者删除,关闭服务重新开启,都是可以的
【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

4.首先我们开启IMAP/SMTP服务,需要发送短信验证,使用手机微信,浏览器扫码都行,发送成功后,点击我已发送

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

5.然后就会生成一串授权码, 一定一定要先记下来,再点击确定,这里 使用设备随便填

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

6.接着,我们开启POP3/SMTP服务,一样需要扫码发送短信

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

7.开启成功后,就会弹出提示,我们就可以用刚刚的授权码来发送邮件了

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

; POP3 & SMTP & IMAP 介绍

POP3 是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。
SMTP 的全称是”Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。
IMAP 全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。
网易163免费邮箱相关服务器信息
服务器名称服务器地址SSL协议端口号非SSL协议端口号IMAPimap.163.com993143SMTPsmtp.163.com456/99425POP3pop.163.com995110 POP3 IMAP 的区别
该协议允许电子邮件客户端将邮件下载到服务器上,但客户端上的操作(如移动邮件、标记为已读等)不会被反馈到服务器,比如通过客户端接收三封邮件的邮箱并移动到其他文件夹,这些邮件在邮箱服务器上是不会同时移动的。

[En]

The protocol allows the e-mail client to download the mail on the server, but the operations on the client (such as moving mail, marking read, etc.) will not be fed back to the server, for example, through the client to receive three messages in the mailbox and moved to other folders, these messages on the mailbox server are not moved at the same time.

IMAP 提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
同时, IMAP POP3 那样提供了方便的邮件下载服务,让用户能进行离线阅读。 IMAP 提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外, IMAP 更好地支持了从多个不同设备中随时访问新邮件。
操作位置操作内容IMAPPOP3收件箱阅读,标记,移动,删除邮件等客户端与邮箱更新同步仅客户端内发件箱保存到已发送客户端与邮箱更新同步仅客户端内创建文件夹新建自定义文件夹客户端与邮箱更新同步仅客户端内草稿保存草稿客户端与邮箱更新同步仅客户端内垃圾文件夹接受误移入垃圾文件夹的邮件支持不支持广告邮件接受被移入广告文件夹的邮件支持不支持总之, IMAP 整体上为用户带来更为便捷和可靠的体验。 POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
注: 若在web邮箱中设置了”保存到已发送”,使用客户端POP服务发信时,已发邮件也会自动同步到网页端”已发送”文件夹内。

三、Python发送邮件

发送默认邮件

1.启动PyCharm
2.新建文件email_163

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

3.导入发送邮件模块


import smtplib

4.创建class类


class Email163(object):

5.建议所有不怎么会变动的设置为类常量


HOST = 'smtp.163.com'

PORT = '25'

PASSWORD = '填写自己的授权码(不是邮箱密码)'

FROM_ADDR = '填写自己发送者的邮箱'

6.构造函数

def __init__(self, msg: str, to_addrs: str) -> None:
"""
        构造函数
        :param msg: 邮件内容
        :param to_addrs: 邮件接收者
"""
    self.msg = msg
    self.to_addrs = to_addrs

7.定义发送默认邮件函数

def send_default_email(self) -> None:
"""
    发送默认邮件
    :return:None
"""
    try:

        smtp = smtplib.SMTP()

        smtp.connect(self.HOST, self.PORT)

        smtp.login(self.FROM_ADDR, self.PASSWORD)

        smtp.sendmail(self.FROM_ADDR, self.to_addrs, self.msg)

        smtp.close()
        print(f'邮件成功发送给:{self.to_addrs}')
    except smtplib.SMTPException:
        raise f'给{to_addrs}发送邮件失败'

8.入口函数调用

if __name__ == '__main__':

    msg = 'hello world'

    to_addrs = '980338974@qq.com'

    email163 = Email163(msg, to_addrs)

    email163.send_default_email()

9.可以看到邮件以及发送成功了

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛
10.接下来我们登录接收的邮箱看看,发现成功接收了邮件,但是没有主题,也没有任何内容
【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

邮件格式

我们可以使用第三方库 email中的一些模块,更方便快速的构造邮件内容

发送文本格式邮件

提示:如果使用email模块群发邮件,群发报错AttributeError: 'list' object has no attribute 'decode'可以将接收者列表用,或;拼接为字符串','.join(to_addrs)

1.导入模块


from email.header import Header

from email.mime.text import MIMEText

2.定义发送文本格式邮件函数

def send_text_email(self) -> None:
"""
        发送文本格式邮件
        :return:None
"""
    try:

        smtp = smtplib.SMTP()

        smtp.connect(self.HOST, self.PORT)

        smtp.login(self.FROM_ADDR, self.PASSWORD)

        message = MIMEText('这是使用Python发送的邮件测试!', 'plain', 'utf-8')

        message['Subject'] = Header('Python发送邮件', 'utf-8')

        message['From'] = Header(self.FROM_ADDR, 'utf-8')

        message['To'] = Header(self.to_addrs, 'utf-8')
    # 发送邮件
    smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())
    # 发送完邮件,关闭服务
    smtp.close()
    print(f'邮件成功发送给:{self.to_addrs}')
except smtplib.SMTPException:
    raise f'给{to_addrs}发送邮件失败'

3.入口函数调用

if __name__ == '__main__':

    msg = 'hello world'

    to_addrs = '980338974@qq.com'

    email163 = Email163(msg, to_addrs)

    email163.send_text_email()

4.再看邮箱,就有主题和内容了

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

发送HTML格式邮件

1.定义发送HTML格式邮件函数

def send_html_email(self) -> None:
"""
        发送HTML格式邮件
        :return:None
"""
    try:

        smtp = smtplib.SMTP()

        smtp.connect(self.HOST, self.PORT)

        smtp.login(self.FROM_ADDR, self.PASSWORD)

        text = """
            这是使用Python发送的HTML格式邮件测试,我是h1
            我是一个链接

                我是表格列头

                    我是有颜色的表单元格

"""

        message = MIMEText(text, 'html', 'utf-8')

        message['Subject'] = Header('Python发送邮件', 'utf-8')

        message['From'] = Header(self.FROM_ADDR, 'utf-8')

        message['To'] = Header(','.join(self.to_addrs), 'utf-8')

    # 发送邮件
    smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())
    # 发送完邮件,关闭服务
    smtp.close()
    print(f'邮件成功发送给:{self.to_addrs}')
except smtplib.SMTPException:
    raise f'给{to_addrs}发送邮件失败'

2.入口函数调用

if __name__ == '__main__':

    msg = 'hello world'

    to_addrs = '980338974@qq.com'

    email163 = Email163(msg, to_addrs)

    email163.send_html_email()

发送HTML带内嵌图片

邮件中HTML文本中,如果使用外网链接地址,一般是无效的,同样,我们可以用MIMEImage模块完成

1.导入模块


from email.mime.multipart import MIMEMultipart

from email.mime.image import MIMEImage

2.定义函数

def send_html_with_image_email(self) -> None:
"""
        发送HTML格式邮件带图片
        :return:None
"""
    try:

        smtp = smtplib.SMTP()

        smtp.connect(self.HOST, self.PORT)

        smtp.login(self.FROM_ADDR, self.PASSWORD)

        message = MIMEMultipart('related')

    # 构造邮件主题信息
    # 主题
    message['Subject'] = Header('Python发送邮件', 'utf-8')
    # 发送者
    message['From'] = Header(self.FROM_ADDR, 'utf-8')
    # 接收者
    message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串
    # message['To'] = Header(self.to_addrs, 'utf-8')

    text = """
        <h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1>
        <a href="http://t.csdn.cn/p58Yf">我是一个链接</a>
        <table>
            <th>我是表格列头</th>
            <tr>
                <td bgcolor="PowderBlue">我是有颜色的表单元格</td>
            </tr>
        </table>
        <p>CSDN:</p>
        <p><img src="cid:csdn"></p>
"""
    # 附加邮件正文
    message.attach(MIMEText(text, 'html', 'utf-8'))
    # 打开图片
    img_name = 'csdn.gif'
    file = open(img_name, 'rb')
    img_data = file.read()
    file.close()
    # 创建图片
    img = MIMEImage(img_data)
    # 定义图片ID,在HTML文本中引用
    img.add_header('Content-ID', 'csdn')
    # 附加图片
    message.attach(img)

    # 发送邮件
    smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())
    # 发送完邮件,关闭服务
    smtp.close()
    print(f'邮件成功发送给:{self.to_addrs}')
except smtplib.SMTPException:
    raise f'给{to_addrs}发送邮件失败'

3.入口函数调用

if __name__ == '__main__':

    msg = 'hello world'

    to_addrs = '980338974@qq.com'

    email163 = Email163(msg, to_addrs)

    email163.send_html_with_image_email()

4.查看邮箱,图片显示正常,因为我是网易邮箱发送给QQ邮箱,QQ邮箱设置了保护机制,点击显示图片就行了

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

5.可以看到,HTML和内嵌图片都显示成功了(这个 CSDN是个gif)

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

发送带附件邮件

1.在 email_163.py同级创建 attachment.txt文件,文件内容可写可不写

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

2.导入模块, &#x6DF7;&#x5408;&#x6A21;&#x5F0F;&#x5305;&#x542B;&#x6240;&#x6709;&#x7C7B;&#x578B;&#xFF0C;&#x53EF;&#x4EE5;&#x53D1;&#x9001;&#x6587;&#x672C;&#x683C;&#x5F0F;&#xFF0C;HTML&#x683C;&#x5F0F;&#xFF0C;&#x5E26;&#x9644;&#x4EF6;


from email.mime.multipart import MIMEMultipart

3.定义发送带附件邮件函数

def send_attachment_email(self) -> None:
"""
    发送带附件邮件
    :return:None
"""
try:
    # 实例SMTP
    smtp = smtplib.SMTP()
    # 连接邮箱服务器
    smtp.connect(self.HOST, self.PORT)
    # 验证授权码
    smtp.login(self.FROM_ADDR, self.PASSWORD)
    # 实例带附件的邮件
    message = MIMEMultipart()
    # 构造邮件内容
    # 第一个参数_text:内容
    # 第二个参数_subtype:格式
    # 第三个参数_charset:编码
    text = """
        <h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1>
        <a href="http://t.csdn.cn/p58Yf">我是一个链接</a>
        <table>
            <th>我是表格列头</th>
            <tr>
                <td bgcolor="PowderBlue">我是有颜色的表单元格</td>
            </tr>
        </table>
"""
    # 邮件正文
    message.attach(MIMEText(text, 'html', 'utf-8'))
    # 构造邮件主题信息
    # 发送者
    message['From'] = Header(self.FROM_ADDR, 'utf-8')
    # 接收者
    message['To'] = Header(','.join(self.to_addrs), 'utf-8')  # 接收者为多人[]时,需要用,拼接为字符串
    # message['To'] = Header(self.to_addrs, 'utf-8')
    # 主题
    message['Subject'] = Header('Python发送邮件', 'utf-8')

    # 上传当前目录下的test.txt文件(附加文件1)
    attachment = MIMEText(open('attachment.txt', 'rb').read(), 'base64', 'utf-8')
    # 指定消息内容为字节流
    attachment["Content-Type"] = 'application/octet-stream'
    # 消息描述,这里的filename可以随便填写(最好不要中文,可能会乱码),这里填写的就会在邮件中附件名称显示
    attachment["Content-Disposition"] = 'attachment; filename="attachment.txt"'
    # 附加文件
    message.attach(attachment)

    # 上传当前目录下的test.txt文件(附件2)
    attachment = MIMEText(open('attachment.txt', 'rb').read(), 'base64', 'utf-8')
    # 指定消息内容为字节流
    attachment["Content-Type"] = 'application/octet-stream'
    # 消息描述,这里的filename可以随便填写(最好不要中文,可能会乱码),这里填写的就会在邮件中附件名称显示
    attachment["Content-Disposition"] = 'attachment; filename="attachment2.txt"'
    # 附加文件2
    message.attach(attachment)

    # 发送邮件
    smtp.sendmail(self.FROM_ADDR, self.to_addrs, message.as_string())
    print(f'邮件成功发送给:{self.to_addrs}')
except smtplib.SMTPException:
    raise f'给{to_addrs}发送邮件失败'

4.入口函数调用

if __name__ == '__main__':

    msg = 'hello world'

    to_addrs = '980338974@qq.com'

    email163 = Email163(msg, to_addrs)

    email163.send_attachment_email()

5.打开邮箱查看,发现邮件中有两个附件

【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

四、完整代码

&#x5176;&#x5B9E;&#x4E0A;&#x9762;&#x4EE3;&#x7801;&#x4E2D;&#xFF0C;&#x5927;&#x91CF;&#x7684;&#x810F;&#x4EE3;&#x7801;&#xFF0C;&#x5F88;&#x591A;&#x91CD;&#x590D;&#x6027;&#x5185;&#x5BB9;&#xFF0C;&#x4E0B;&#x9762;&#x5B8C;&#x6574;&#x4EE3;&#x7801;&#x6211;&#x505A;&#x4E86;&#x7B80;&#x5355;&#x7684;&#x5C01;&#x88C5;&#x5904;&#x7406;
PASSWORD&#x586B;&#x5199;&#x81EA;&#x5DF1;&#x7684;&#x6388;&#x6743;&#x7801;&#xFF0C;FROM_ADDR&#x586B;&#x5199;&#x90AE;&#x4EF6;&#x53D1;&#x9001;&#x8005;


import smtplib

from email.header import Header

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

from email.mime.image import MIMEImage

class Email163(object):

HOST = 'smtp.163.com'

PORT = '25'

PASSWORD = ''

FROM_ADDR = ''

SUBTYPE_PLAIN = 'plain'

SUBTYPE_HTML = 'html'

ATTACHMENT = 'attachment'

EMBEDDED = 'embedded'
def __init__(self, subtype: str = SUBTYPE_PLAIN, charset: str = 'utf-8') -> None:
"""
    构造函数
    :param subtype: 邮件格式:plain:文本,html:超文本标记语言,n(默认plain)
    :param charset: 编码,默认utf-8
"""
    self.subtype = subtype
    self.charset = charset

def get_smtp(self) -> smtplib.SMTP:
"""
    实例SMTP并验证
    :return: smtplib.SMTP
"""
    try:
        # 实例SMTP
        smtp = smtplib.SMTP()
        # 连接邮箱服务器
        smtp.connect(self.HOST, self.PORT)
        # 验证授权码
        smtp.login(self.FROM_ADDR, self.PASSWORD)
        return smtp
    except smtplib.SMTPException:
        raise f'验证邮箱失败:用户:{self.FROM_ADDR},授权码:{self.PASSWORD}'

def get_message(self, subject: str, text: str, subtype: str):
"""
    获取邮件信息
    :param subject: 主题
    :param text: 内容
    :param charset: 编码
    :return: str
"""
    # 构造邮件内容
    # 第一个参数_text:内容
    # 第二个参数_subtype:格式
    # 第三个参数_charset:编码
    if subtype == "attachment":
        # 实例混合邮件(附件)
        message = MIMEMultipart()
    elif subtype == "embedded":
        # 实例内嵌的邮件(文本,HTML,图片)
        message = MIMEMultipart('related')
    else:
        # 实例文字邮件
        message = MIMEText(text, self.subtype, self.charset)

    # 构造邮件主题信息
    # 主题
    message['Subject'] = Header(subject, self.charset)
    # 发送者
    message['From'] = Header(self.FROM_ADDR, self.charset)
    # 接收者,接收者为多人[]时,需要用,拼接为字符串
    message['To'] = Header(','.join(to_addrs), self.charset)
    # 返回消息实例
    return message

def attach_attachment(self, message, text: str, subtype: str, attachment_list: list[dict[str, str]]) -> None:
"""
    附加上传附件(可多文件)
    :param message: 邮件消息
    :param subtype: 邮件类型
    :param attachment_list: 附件列表(内嵌也一样,名称对应src="cid:name"中的name):格式[{"path":"附件路径1","name":"显示名称"},{"path":"附件路径2","name":"显示名称"}]
    :return: None
"""
    # 附加正文
    if subtype in (Email163.ATTACHMENT, Email163.EMBEDDED):
        message.attach(MIMEText(text, self.subtype, self.charset))
        if subtype == Email163.ATTACHMENT:  # 附件
            for item in attachment_list:
                with open(item["path"], 'rb') as f:
                    file_data = f.read()
                # 上传文件
                attachment = MIMEText(file_data, 'base64', 'utf-8')
                # 指定消息内容为字节流
                attachment["Content-Type"] = 'application/octet-stream'
                # 消息描述,这里的filename可以随便填写,这里填写的就会在邮件中附件名称显示
                attachment["Content-Disposition"] = f'attachment; filename="{item["name"]}"'
                # 附加文件
                message.attach(attachment)
        elif subtype == Email163.EMBEDDED:  # 内嵌
            for item in attachment_list:
                with open(item["path"], 'rb') as f:
                    img_data = f.read()
                # 创建图片
                img = MIMEImage(img_data)
                # 定义图片ID,在HTML文本中引用
                img.add_header('Content-ID', item["name"])
                # 附加图片
                message.attach(img)

def send_email(self, smtp: smtplib.SMTP, message: str, to_addrs: list[str]) -> None:
"""
    发送邮件
    :param smtp: SMTP实例
    :param message: 邮件消息
    :return: None
"""
    try:
        # 发送邮件
        smtp.sendmail(self.FROM_ADDR, ','.join(to_addrs), message.as_string())
        # 发送完邮件,关闭服务
        smtp.close()
        print(f'邮件成功发送给:{to_addrs}')
    except smtplib.SMTPException:
        raise f'给{to_addrs}发送邮件失败'

def main(self, subject: str, text: str, to_addrs: list[str], subtype: str = None,
                   attachment_list: list[dict[str, str]] = None) -> None:
"""
    发送网易邮件
    :param subject: 主题
    :param text: 内容
    :param to_addrs: 接收者
    :param attachment_list: 附件(默认空,格式[{"path":"文件路径","name":"显示文件名"}])
    :return:
"""
    # 获取SMTP实例
    smtp = self.get_smtp()
    # 获取邮件消息
    message = self.get_message(subject, text, subtype)
    # 处理附件和内嵌
    self.attach_attachment(message, text, subtype, attachment_list)
    # 发送邮件
    self.send_email(smtp, message, to_addrs)

if name == 'main':
region 发送文本格式邮件

实例发送网易邮件
email163 = Email163()
# 主题
subject = 'Python发送邮件'
# 内容
text = '这是使用Python发送的文本格式邮件测试!'
# 接收者(用list[str])
to_addrs = ['980338974@qq.com']
# 调用统一函数main
email163.main(subject, text, to_addrs)

endregion

发送HTML格式,附件格式,HTML内嵌图片格式公用内容
html_text = """
<h1>这是使用Python发送的HTML格式邮件测试,我是h1</h1>
<a href="http://t.csdn.cn/p58Yf">我是一个链接</a>
<table>
    <th>我是表格列头</th>
    <tr>
        <td bgcolor="PowderBlue">我是有颜色的表单元格</td>
    </tr>
</table>
<h3>CSDN:</h3>
<img src="cid:csdn">
"""

region 发送HTML格式邮件

# 实例发送网易邮件
email163_html = Email163('html')
# 主题
subject = 'Python发送邮件'
# 接收者(用list[str])
to_addrs = ['980338974@qq.com']
# 调用统一函数main
email163_html.main(subject, html_text, to_addrs)

endregion

region 发送带附件邮件

# 实例发送网易邮件
email163_html = Email163('html')
# 主题
subject = 'Python发送邮件'
# 接收者(用list[str])
to_addrs = ['980338974@qq.com']
# 调用上传附件
attachment_list = [{"path": "./attachment.txt", "name": "1.txt"}]
# 调用统一函数main
email163_html.main(subject, html_text, to_addrs, Email163.ATTACHMENT, attachment_list)

endregion

region 发送HTML内嵌图片邮件
# 实例发送网易邮件
email163_html = Email163('html')
# 主题
subject = 'Python发送邮件'
# 接收者(用list[str])
to_addrs = ['980338974@qq.com']
# 调用上传附件
attachment_list = [{"path": "./csdn.gif", "name": "csdn"}]
# 调用统一函数main
email163_html.main(subject, html_text, to_addrs, Email163.EMBEDDED, attachment_list)

endregion

总结

以上就是关于用Python发送邮件的基本用法了,还有其他的邮箱也都可以,其实方法类似,一样注册邮箱,开通服务,然后登录验证授权码,构造邮件头,构造邮件正文,上传附件…等,有啥疑问的欢迎大家评论留言,感谢大家支持!

Original: https://www.cnblogs.com/xdgy/p/16600059.html
Author: 小呆瓜耶
Title: 【Python】发送邮件,超详细看图敲码(附完整代码)一一CSDN21天学习挑战赛

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/498725/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球