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计算时间差的方法
May 20 Python
Python pickle模块用法实例分析
May 27 Python
详解C++编程中一元运算符的重载
Jan 19 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
python使用numpy读取、保存txt数据的实例
Oct 14 Python
Python2和Python3中urllib库中urlencode的使用注意事项
Nov 26 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
Python中按值来获取指定的键
Mar 04 Python
python爬虫模拟浏览器的两种方法实例分析
Dec 09 Python
基于pycharm实现批量修改变量名
Jun 02 Python
python 如何快速复制序列
Sep 07 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 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短域名转换为实际域名函数
2011/01/17 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
php使用正则验证中文
2016/04/06 PHP
利用JQuery和JS实现奇偶行背景颜色自定义效果
2012/11/19 Javascript
早该知道的7个JavaScript技巧
2013/03/27 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
用JavaScript实现一个代码简洁、逻辑不复杂的多级树
2014/05/23 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
手机端 HTML5使用photoswipe.js仿微信朋友圈图片放大效果
2016/08/25 Javascript
js前端解决跨域问题的8种方案(最新最全)
2016/11/18 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
python中Genarator函数用法分析
2015/04/08 Python
Python读取Excel的方法实例分析
2015/07/11 Python
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
python实现实时视频流播放代码实例
2020/01/11 Python
python自动下载图片的方法示例
2020/03/25 Python
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
副总经理工作职责
2013/11/28 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
离婚协议书范本样本
2014/08/19 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
党员转正介绍人意见
2015/06/03 职场文书
社区安全温馨提示语
2015/07/14 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
Python实现生成bmp图像的方法
2021/06/13 Python
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL