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计算一个序列的平均值的方法
Jul 11 Python
python面向对象_详谈类的继承与方法的重载
Jun 07 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
python3的输入方式及多组输入方法
Oct 17 Python
selenium python 实现基本自动化测试的示例代码
Feb 25 Python
Python @property及getter setter原理详解
Mar 31 Python
python实现简单学生信息管理系统
Apr 09 Python
Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript实现社交分享系统
Apr 21 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
如何利用Python写个坦克大战
Nov 18 Python
python中os.path.join()函数实例用法
May 26 Python
健身房被搭讪?用python写了个小米计时器助人为乐
Jun 08 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
PHP模板引擎smarty详细介绍
2015/05/26 PHP
php使用number_format函数截取小数的方法分析
2016/05/27 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
javascript document.compatMode兼容性
2010/02/23 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
纯javascript实现图片延时加载方法
2015/08/21 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
js密码强度校验
2015/11/10 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
浅析AMD CMD CommonJS规范--javascript模块化加载学习心得总结
2016/03/16 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python 日志 logging模块详细解析
2020/03/31 Python
解决Python 写文件报错TypeError的问题
2020/10/23 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
公司业务员岗位职责
2014/03/18 职场文书
银行竞聘演讲稿
2014/05/16 职场文书
爱我中华演讲稿
2014/05/20 职场文书
男性健康日的活动方案
2014/08/18 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
公司离职证明标准格式
2014/11/18 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
基于tensorflow权重文件的解读
2021/05/26 Python
JavaScript异步操作中串行和并行
2021/11/20 Javascript