python3使用SMTP发送简单文本邮件

yipeiwu_com6年前Python基础

一、设置开启SMTP服务并获取授权码

0.如果使用第三方邮件服务器SMTP服务来发送邮件,首先要在邮箱设置里面开启POP3/SMTP/IMAP服务,下面以163邮箱为例,其它邮箱设置方法相同

163邮箱SMTP服务器:smtp.163.com

QQ邮箱SMTP服务器:smtp.qq.com

1.首先登录自己的邮箱,找到【设置】》【POP3/SMTP/IMAP】,开启相应的服务

2.然后开启并获取客户端授权码(这里的授权码并不是登录邮箱时的密码,而是第三方邮箱服务使用的授权码)

二、使用Python3 发送邮件

0.使用的环境为:
Python 3.6.3 (64bit)
PyCharm 2017.3 (64bit)

1.实现代码:

import smtplib 
from email.header import Header     # 用来设置邮件头和邮件主题 
from email.mime.text import MIMEText    # 发送正文只包含简单文本的邮件,引入MIMEText即可 
 
# 发件人和收件人 
sender = 'XXXXXXXXXXX@163.com' 
receiver = 'XXXXXXXXX@qq.com' 
 
# 所使用的用来发送邮件的SMTP服务器 
smtpServer = 'smtp.163.com' 
 
# 发送邮箱的用户名和授权码(不是登录邮箱的密码) 
username = 'XXXXXXXXXXX' 
password = 'XXXXXXXX' 
 
mail_title = '这里是邮件的主题' 
mail_body = '这里是邮件的正文' 
 
# 创建一个实例 
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("邮件发送失败!!!") 

2.发送成功之后,如果在收件人的邮箱看不到邮件,可能是被当做垃圾邮件拦截了,可以去拦截记录里面找一下
发送方发送的邮件:

接收方收到的邮件:

3.这里是发送最简单的格式的邮件的示例,正文只包含文本

还可以发送:
正文为HTML格式的邮件
包含附件的邮件(附件可以是HTML网页,TXT文本,JPG图片,以及音频、视频等)
后面继续讲

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

django ManyToManyField多对多关系的实例详解

django ManyToManyField多对多关系的实例详解

Django 的 ORM 有多种关系:一对一,多对一,多对多 各自定义的方式为 : 一对一: OneToOneField 多对一: ForeignKey 多对多: ManyToManyF...

Python scikit-learn 做线性回归的示例代码

Python scikit-learn 做线性回归的示例代码

一、概述 机器学习算法在近几年大数据点燃的热火熏陶下已经变得被人所“熟知”,就算不懂得其中各算法理论,叫你喊上一两个著名算法的名字,你也能昂首挺胸脱口而出。当然了,算法之林虽大,但能者...

对python制作自己的数据集实例讲解

对python制作自己的数据集实例讲解

一、数据集介绍 点击打开链接17_Category_Flower 是一个不同种类鲜花的图像数据,包含 17 不同种类的鲜花,每类 80 张该类鲜花的图片,鲜花种类是英国地区常见鲜花。下载...

python每天定时运行某程序代码

思路:利用time函数返回的时间字符串与指定时间字符串做比较,相等的时候执行对应的操作。不知道大家的思路是什么,感觉这样比较耗CPU。。。。 此处设置为15:30:10 输出相应内容,需...

Java多线程编程中ThreadLocal类的用法及深入

ThreadLocal,直译为“线程本地”或“本地线程”,如果你真的这么认为,那就错了!其实,它就是一个容器,用于存放线程的局部变量,我认为应该叫做 ThreadLocalVariabl...