前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3 SMTP发送邮件

Python3 SMTP发送邮件

原创
作者头像
织幻妖
修改2021-01-20 18:10:09
9130
修改2021-01-20 18:10:09
举报

SMTP

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了简单的封装。

一.准备工作

在我们上代码之前,先做好准备工作

1.确认pip版本

安装smtplib和email库的时候,检查下自己的pip 是不是最高版本的,如果不是,建议升级到最高版本

2. 邮件脚本名字

python 邮件脚本的名字千万不能命名为email.py

如果命令为email.py ,在安装email库的时候,会因为冲突,一直报这样的错

代码语言:javascript
复制
ModuleNotFoundError: No module named 'cStringIO'
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

3.编码格式

右下角的编码格式必须是UTF-8,不然执行的时候会一直报这个错

D:\PycharmProjects\untitled\python\Scripts\python.exe D:/PycharmProjects/python/youjian.py File "D:/PycharmProjects/python/youjian.py", line 2 SyntaxError: Non-UTF-8 code starting with '\xd3' in file D:/PycharmProjects/python/youjian.py on line 2, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details Process finished with exit code 1

解决方法

在创建.py文件中的底面右下角找到GBK,将GBK换成UTF-8即可

4.开启SMTP协议

登录自己的163邮箱和qq邮箱,开启SMTP协议,如下图

163邮箱
163邮箱
qq邮箱
qq邮箱

我们需要记住发送邮箱的授权码,如下图这样的

授权码
授权码

二.代码分析

1.引入smtplib和email库

代码语言:javascript
复制
import smtplib
from email.header import Header                  # 用来设置邮件头和邮件主题
from email.mime.text import MIMEText             # 发送正文只包含简单文本的邮件,引入MIMEText即可

2.定义发件人和收件人

代码语言:javascript
复制
sender = 'XXXXXXXXXXXXXXXX@163.com'
receiver = 'XXXXXXXXXXXXX@qq.com'

3.定义发送邮件的SMTP服务器

代码语言:javascript
复制
# 所使用的用来发送邮件的SMTP服务器
smtpServer = 'smtp.163.com'

4.定义发送邮件的用户名和授权码

代码语言:javascript
复制
# 发送邮箱的用户名和授权码(不是登录邮箱的密码)
username = 'XXXXXXXXXXXXXXX'
password = 'XXXXXXXXXXXXXXX'

5.定义主题和内容

代码语言:javascript
复制
mail_title = '测试发送邮件'
mail_body = '邮件发送123'

6.创建一个实例

代码语言:javascript
复制
message = MIMEText(mail_body, 'plain', 'utf-8')  # 邮件正文
message['From'] = sender  # 邮件上显示的发件人
message['To'] = receiver  # 邮件上显示的收件人
message['Subject'] = Header(mail_title, 'utf-8')  # 邮件主题

7.创建连接,发送邮件

代码语言:javascript
复制
try:
    smtp = smtplib.SMTP()  # 创建一个连接
    smtp.connect(smtpServer)  # 连接发送邮件的服务器
    smtp.login(username, password)  # 登录服务器
    smtp.sendmail(sender, receiver, message.as_string())  # 填入邮件的相关信息并发送
    print("邮件发送成功!!!")
    smtp.quit()
except smtplib.SMTPException:
    print("邮件发送失败!!!")

8.总结

完整代码:

代码语言:javascript
复制
import smtplib
from email.header import Header                  # 用来设置邮件头和邮件主题
from email.mime.text import MIMEText             # 发送正文只包含简单文本的邮件,引入MIMEText即可

# 发件人和收件人
sender = 'XXXXXXXXXXXXX@163.com'
receiver = 'XXXXXXXXXXX@qq.com'

# 所使用的用来发送邮件的SMTP服务器
smtpServer = 'smtp.163.com'

# 发送邮箱的用户名和授权码(不是登录邮箱的密码)
username = 'XXXXXXXXXXXXXXX'
password = 'XXXXXXXXXXXXXXX'

mail_title = '测试发送邮件'
mail_body = '邮件发送123'

# 创建一个实例
message = MIMEText(mail_body, 'plain', 'utf-8')  # 邮件正文
message['From'] = sender  # 邮件上显示的发件人
message['To'] = receiver  # 邮件上显示的收件人
message['Subject'] = Header(mail_title, 'utf-8')  # 邮件主题

try:
    smtp = smtplib.SMTP()  # 创建一个连接
    smtp.connect(smtpServer)  # 连接发送邮件的服务器
    smtp.login(username, password)  # 登录服务器
    smtp.sendmail(sender, receiver, message.as_string())  # 填入邮件的相关信息并发送
    print("邮件发送成功!!!")
    smtp.quit()
except smtplib.SMTPException:
    print("邮件发送失败!!!")

执行效果:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SMTP
  • 一.准备工作
    • 1.确认pip版本
      • 2. 邮件脚本名字
        • 3.编码格式
          • 4.开启SMTP协议
          • 二.代码分析
            • 1.引入smtplib和email库
              • 2.定义发件人和收件人
                • 3.定义发送邮件的SMTP服务器
                  • 4.定义发送邮件的用户名和授权码
                    • 5.定义主题和内容
                      • 6.创建一个实例
                        • 7.创建连接,发送邮件
                          • 8.总结
                          相关产品与服务
                          腾讯云代码分析
                          腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档