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 logging模块学习笔记
May 24 Python
详解Python3中yield生成器的用法
Aug 20 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python设置值及NaN值处理方法
Jul 03 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
django的settings中设置中文支持的实现
Apr 28 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
Django模板语言 Tags使用详解
Sep 09 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
spyder 在控制台(console)执行python文件,debug python程序方式
Apr 20 Python
python 利用zmail库发送邮件
Sep 11 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实现utf-8转unicode函数分享
2015/01/06 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
在Laravel 的 Blade 模版中实现定义变量
2019/10/14 PHP
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
基于javascript代码检测访问网页的浏览器呈现引擎、平台、Windows操作系统、移动设备和游戏系统
2015/12/03 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
Vue.js学习笔记之修饰符详解
2017/07/25 Javascript
详解node单线程实现高并发原理与node异步I/O
2017/09/21 Javascript
React BootStrap用户体验框架快速上手
2018/03/06 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
微信小程序系列之自定义顶部导航功能
2019/05/21 Javascript
解决echarts图表使用v-show控制图表显示不全的问题
2020/07/19 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
[02:16]DOTA2英雄基础教程 干扰者
2014/01/15 DOTA
python中readline判断文件读取结束的方法
2014/11/08 Python
python实现文件快照加密保护的方法
2015/06/30 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
使用Python生成XML的方法实例
2017/03/21 Python
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python spyder中读取txt为图片的方法
2018/04/27 Python
python爬虫爬取监控教务系统的思路详解
2020/01/08 Python
基于python 等频分箱qcut问题的解决
2020/03/03 Python
基于python和flask实现http接口过程解析
2020/06/15 Python
世界上最大的巴士旅游观光公司:Big Bus Tours
2016/10/20 全球购物
一套.net面试题及答案
2016/11/02 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
初中生学习的自我评价
2013/11/14 职场文书
年会主持词结束语
2014/03/27 职场文书
2014年新教师工作总结
2014/11/08 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python