Python使用SMTP协议发送邮件

前言

操作系统:Windows10专业版
Python版本:Python 3.8
开发软件:Pycharm Community 2022.3
第三方库:email

发送电子邮件是个很常见的开发需求。

比如你写的天气预报程序、日程待办程序、商品降价提醒等等,你都可以采用这种方式来写一个邮件发送函数来为自己服务。

Python发送邮件并不复杂,各个国家各个公司都有自己不同的安全策略,我们只演示腾讯的QQ邮箱。

一、前期准备(一定要做!)

我们想要用QQ邮箱发送邮件,不可能只填写一个邮箱账号就可以的,而使用用户登录密码的方式不太安全,所以我们需要一个授权码

1.QQ邮箱授权码

在这个网站 登录QQ邮箱 登录自己的QQ账号,不推荐重新注册新的,QQ邮箱重新注册的邮箱的话是两周内是不能获取授权码的。
在这里插入图片描述

登录进去后点击此处设置

在这里插入图片描述

在设置界面点击这个 “账户”

在这里插入图片描述

往下翻,直到看见下图的东西

在这里插入图片描述

我们要将第一个服务开启,也就是POP3/SMTP服务,这时候需要我们用注册的手机号给指定号码发短信,资费是0.1元/条。

然后点击生成授权码,这个也是与上图一样是需要发短信的。

在这里插入图片描述

上一个是启用pop3协议,这一个是获取授权码。

发送好后点击我已发送,然后就会弹出你的授权码

在这里插入图片描述
复制这一串字符,这个就是你的所登录的账号QQ邮箱的授权码了,记得要复制好后再关闭这个界面,否则的话又要重新发短信(身家 - 0.1元)。

2.email库的安装

这里我推荐使用Pycharm来安装:设置–>项目–>项目–>Python解释器–>小加号–>输入email然后安装就好了
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

等它安装好以后那么就可以继续下一步了。

二、代码部分

# code:utf-8
# Create by __H2__
# 2023/3/28
import smtplib
from email.mime.text import MIMEText

# 下面两行是发件人信息,这里要填你自己的账号信息
msg_from = '**********' # 这里填写你自己的邮箱
key = '*********'   #这里填写我让你注册的邮箱授权码,


# 下面三个变量分别是收件人、邮件标题、邮件内容
msg_to = "1322386539@qq.com" # 填收件人邮箱(如你的室友,这个是我自己的)
title = "邮件测试"
text = """
HelloWorld!

This is a smtp test.

You had do it.

其实中文也不是不行。

日本語は不可能ではない.

But I would like to use English.
"""

def send(msg_to,tittle,text):
        """发送邮件函数"""
        
        # 邮件基本信息
        msg_to = msg_to # 收件人邮箱
        subject = tittle # 邮件标题
        content = text # 邮件内容,可以是一大段文本

        #构造邮件
        msg = MIMEText(content)
        msg['Subject'] = subject
        msg['To'] = msg_to
        msg['From'] = msg_from

        #发送邮件
        try:
                ss = smtplib.SMTP_SSL('smtp.qq.com',465)  #465:QQ邮箱服务器的端口号
                ss.login(msg_from,key)
                ss.sendmail(msg_from,msg_to,msg.as_string()) #发送
                print('邮箱发送成功!')
                
        except Exception as e:
                print('邮箱发送失败!详情:',e)


send(msg_to=msg_to,tittle=title,text = text)

三、实际效果

如下图所示:

此代码还有值得优化的空间,如将压缩包一起发送、使用图形化界面来简化这个发送步骤。
在这里插入图片描述