侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python使用smtplib模块发送电子邮件的流程详解

Python  /  管理员 发布于 7年前   215

1、登录SMTP服务器
首先使用网上的方法(这里使用163邮箱,smtp.163.com是smtp服务器地址,25为端口号):

import smtplibserver = smtplib.SMTP('smtp.163.com', 25)server.login('[email protected]', 'password')Traceback (most recent call last): File "C:/python/t.py", line 192, in <module>  server.login('[email protected]', 'password') File "C:\Python27\lib\smtplib.py", line 622, in login  raise SMTPAuthenticationError(code, resp)smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')

发现返回: 

smtplib.SMTPAuthenticationError: (535, 'Error: authentication failed')

,提示验证失败。
有说python不支持SMTP服务,或是服务没开启之类的。但是我想起上次我用foxmail登录我的163邮箱的时候,邮箱密码都输对了还是提示我密码错误,最后的解决办法是:像QQ和163邮箱现在都有个客户端密码,用第三方登录时需用客户端密码登录才行,python也是如此,因此去设置好客户端密码,再用客户端密码登录。

import smtplibserver = smtplib.SMTP('smtp.163.com', 25)server.login('[email protected]', 'clientPassword')

    此时便返回登录成功提示:

(235, 'Authentication successful')

2、发送邮件

首先使用网上给出的代码:

import smtplibfrom email.mime.text import MIMETextserver = smtplib.SMTP('smtp.163.com', 25)server.login('[email protected]', 'clientPassword')msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')server.sendmail('[email protected]', ['[email protected]'], msg.as_string())

构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后个是编码方式。
sendmail是发邮件方法,第一个参数是发件邮箱,第二个参数是收件人邮箱,是一个列表,代表可以同时发给多个人,as_string是把MIMEText对象变成str。
但是执行结果并不能得到网上说的结果:

而是:

Traceback (most recent call last): File "C:/python/t.py", line 195, in <module>  server.sendmail('[email protected]', ['[email protected]'], msg.as_string()) File "C:\Python27\lib\smtplib.py", line 746, in sendmail  raise SMTPDataError(code, resp)smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11,D8CowEDpDkE427JW_wQIAA--.4996S2 1454562105,please see http://mail.163.com/help/help_spam_16.htm?ip=171.221.144.51&hostid=smtp11&time=1454562105')

网上一查才知道:smtplib.SMTPDataError: (554, 'DT:SPM 163 smtp11……的错误是因为信封发件人和信头发件人不匹配。可以看出看出图片中并没有发件人和主题,所以需要对代码做如下修改:

import smtplibfrom email.header import Headerfrom email.mime.text import MIMETextserver = smtplib.SMTP('smtp.163.com', 25)server.login('[email protected]', 'clientPassword')msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')msg['From'] = '[email protected] <[email protected]>'msg['Subject'] = Header(u'text', 'utf8').encode()msg['To'] = u'飞轮海 <[email protected]>'server.sendmail('[email protected]', ['[email protected]'], msg.as_string())

这样就能成功发出邮件啦
msg里的具体信息可以用一般发邮件方式发封邮件测试下

3、参考示例

import smtplibfrom email.mime.text import MIMETextto_list = ['[email protected]', '[email protected]']server_host = 'smtp.163.com'username = '你的邮箱账号'password = '你的邮箱密码'def send(to_list, sub, content):  '''  :param to_list: 收件人邮箱  :param sub: 邮件标题  :param content: 内容  '''  me = "manager" + "<" + username + ">"   # _subtype 可以设为html,默认是plain  msg = MIMEText(content, _subtype='html')  msg['Subject'] = sub  msg['From'] = me  msg['To'] = ';'.join(to_list)  try:    server = smtplib.SMTP()    server.connect(server_host)    server.login(username, password)    server.sendmail(me, to_list, msg.as_string())    server.close()  except Exception as e:    print str(e)if __name__ == '__main__':  send(to_list, "这个是一个邮件", "<h1>Hello, It's test email.</h1>")

您可能感兴趣的文章:

  • python 七种邮件内容发送方法实例
  • python发送邮件的实例代码(支持html、图片、附件)
  • python中使用smtplib和email模块发送邮件实例
  • 详细讲解用Python发送SMTP邮件的教程
  • Python实现SMTP发送邮件详细教程
  • Python实现自动发送邮件功能
  • Python实现给qq邮箱发送邮件的方法
  • python同时给两个收件人发送邮件的方法
  • Python群发邮件实例代码
  • zabbix利用python脚本发送报警邮件的方法
  • python实现发送邮件及附件功能
  • 用Python实现一个简单的能够发送带附件的邮件程序的教程
  • Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解


  • 上一条:
    详解Python中的__getitem__方法与slice对象的切片操作
    下一条:
    Python教程之全局变量用法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客