python3实现SMTP发送邮件详细教程


Posted in Python onJune 19, 2018

简介

  Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详细的环境调试导致,所以今天特出一个详细的教程,一步一步从环境调试到代码实现整一个教程,希望对还在苦苦寻找解决方法却迟迟不能得到有效解决的朋友们一点帮助。

SMTP协议

  首先了解SMTP(简单邮件传输协议),邮件传送代理程序使用SMTP协议来发送电邮到接收者的邮件服务器。SMTP协议只能用来发送邮件,不能用来接收邮件,而大多数的邮件发送服务器都是使用SMTP协议。SMTP协议的默认TCP端口号是25。

环境调试

  上面说了是使用SMTP协议发送的邮件,所以需要先查看你的发件人邮箱是否有开启SMTP协议,如没有,则需要开启,我测试使用的是163.com的邮箱作为发信人邮箱,在设置中开启SMTP协议如下图所示。

python3实现SMTP发送邮件详细教程

  测试的前提是你需要开通客户端授权,开通后会让你设置密码,那个密码要记好,下面的passwd接收的是授权密码而不是邮箱密码!否则会出现下图所示的错误提示:

python3实现SMTP发送邮件详细教程

Demo

import smtplib
from email.header import Header
from email.mime.text import MIMEText

# 第三方 SMTP 服务
mail_host = "smtp.163.com"   # SMTP服务器
mail_user = "***"         # 用户名
mail_pass = "***"        # 授权密码,非登录密码

sender = ***@163.com'  # 发件人邮箱(最好写全, 不然会失败)
receivers = [***@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

content = '我用Python'
title = '人生苦短' # 邮件主题

def sendEmail():

  message = MIMEText(content, 'plain', 'utf-8') # 内容, 格式, 编码
  message['From'] = "{}".format(sender)
  message['To'] = ",".join(receivers)
  message['Subject'] = title

  try:
    smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 启用SSL发信, 端口一般是465
    smtpObj.login(mail_user, mail_pass) # 登录验证
    smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
    print("mail has been send successfully.")
  except smtplib.SMTPException as e:
    print(e)

def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content):
  email_client = smtplib.SMTP(SMTP_host)
  email_client.login(from_account, from_passwd)
  # create msg
  msg = MIMEText(content, 'plain', 'utf-8')
  msg['Subject'] = Header(subject, 'utf-8') # subject
  msg['From'] = from_account
  msg['To'] = to_account
  email_client.sendmail(from_account, to_account, msg.as_string())

  email_client.quit()

if __name__ == '__main__':
  sendEmail()
  # receiver = '***'
  # send_email2(mail_host, mail_user, mail_pass, receiver, title, content)

刚开始测试时,第一次发送邮件是成功的,但是后面再次测试时却出现了提示554,根据给出的网址查看错误代码 

554 DT:SPM 发送的邮件内容包含了未被许可的信息,或被系统识别为垃圾邮件。请检查是否有用户发送病毒或者垃圾邮件。如下图所示:

python3实现SMTP发送邮件详细教程

针对该问题,究竟如何解决,会在下一篇博文中进行展开。若看到的朋友有好的解决方法,还请提出,在此感谢。

附 参考资料

附 电子书福利(免积分下载)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python基础教程之lambda表达式使用方法
Feb 12 Python
Python中正则表达式的用法实例汇总
Aug 18 Python
python 上下文管理器使用方法小结
Oct 10 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
Python定时任务sched模块用法示例
Jul 16 Python
python的继承知识点总结
Dec 10 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
Python根据指定文件生成XML的方法
Jun 29 Python
浅析python中的del用法
Sep 02 Python
Python 串口通信的实现
Sep 29 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 #Python
Tensorflow使用tfrecord输入数据格式
Jun 19 #Python
Tensorflow 训练自己的数据集将数据直接导入到内存
Jun 19 #Python
python如何爬取个性签名
Jun 19 #Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 #Python
TensorFlow 滑动平均的示例代码
Jun 19 #Python
python3个性签名设计实现代码
Jun 19 #Python
You might like
php的urlencode()URL编码函数浅析
2011/08/09 PHP
关于Zend Studio 配色方案插件的介绍
2013/06/24 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
PHP7变量处理机制修改
2021/03/09 PHP
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
JavaScript实现统计文本框Textarea字数增强用户体验
2012/12/21 Javascript
JQUERY实现网页右下角固定位置展开关闭特效的方法
2015/07/27 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
2018/10/26 jQuery
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&平移轮播效果
2019/08/16 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python二叉树的定义及常用遍历算法分析
2017/11/24 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
Java基础类库面试题
2013/09/04 面试题
优秀志愿者事迹材料
2014/02/03 职场文书
西湖英语导游词
2015/02/06 职场文书
碧霞祠导游词
2015/02/09 职场文书
小学生学习保证书
2015/02/26 职场文书
护士实习自荐信
2015/03/06 职场文书
家长意见书
2015/06/04 职场文书
放假通知怎么写
2015/08/18 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
个人道歉信大全
2019/04/11 职场文书
超级实用!五步法则,教你写好年终工作总结
2019/12/05 职场文书
关于MybatisPlus配置双数据库驱动连接数据库问题
2022/01/22 Java/Android
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle