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爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
Python处理菜单消息操作示例【基于win32ui模块】
May 09 Python
python打造爬虫代理池过程解析
Aug 15 Python
Python根据服务获取端口号的方法
Sep 25 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
Feb 13 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
浅谈JupyterNotebook导出pdf解决中文的问题
Apr 22 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
python PIL模块的基本使用
Sep 29 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
Python 实现绘制子图及子图刻度的变换等问题
May 31 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自动跳转中英文页面
2008/07/29 PHP
php模板原理讲解
2013/11/13 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
php 利用array_slice函数获取随机数组或前几条数据
2015/09/30 PHP
PHP7常量数组用法分析
2016/09/26 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
2017/02/03 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
判断用户的在线状态 onbeforeunload事件
2011/03/05 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
JS中产生20位随机数以0-9为例也可以是a-z A-Z
2014/08/01 Javascript
JavaScript的设计模式经典之建造者模式
2016/02/24 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
AngularJS 2.0入门权威指南
2016/10/08 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
vue2 全局变量的设置方法
2018/03/09 Javascript
解决layui中的form表单与button的点击事件冲突问题
2018/08/15 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
原生js添加一个或多个类名的方法分析
2019/07/30 Javascript
js实现全选和全不选
2020/07/28 Javascript
[02:30]DOTA2放量测试专访海涛:呼吁保护新手玩家
2013/08/26 DOTA
django ajax json的实例代码
2018/05/29 Python
python实现按长宽比缩放图片
2018/06/07 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
python 追踪except信息方式
2020/04/25 Python
Django权限设置及验证方式
2020/05/13 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
remote接口和home接口主要作用
2013/05/15 面试题
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python