文档章节

Python发邮件:发邮件总结

j_hao104
 j_hao104
发布于 2016/02/04 13:17
字数 721
阅读 5041
收藏 147

1、登录SMTP服务器

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

import smtplib
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'password')
Traceback (most recent call last):
  File "C:/python/t.py", line 192, in <module>
    server.login('j_hao104@163.com', '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'),提示验证失败。

    网上给了很多解决办法有很多:

    http://markmail.org/message/3ub3itxq4aqwaikx

    https://segmentfault.com/q/1010000003802498 

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


import smtplib
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')

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

(235, 'Authentication successful')

2、发送邮件

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

import smtplib
from email.mime.text import MIMEText
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
server.sendmail('j_hao104@163.com', ['946150454@qq.com'], 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('j_hao104@163.com', ['946150454@qq.com'], 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 smtplib
from email.header import Header
from email.mime.text import MIMEText
server = smtplib.SMTP('smtp.163.com', 25)
server.login('j_hao104@163.com', 'clientPassword')
msg = MIMEText('hello, send by Python...', 'plain', 'utf-8')
msg['From'] = 'j_hao104@163.com <j_hao104@163.com>'
msg['Subject'] = Header(u'text', 'utf8').encode()
msg['To'] = u'飞轮海 <jinghao5849312@qq.com>'
server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string())

    这样就能成功发出邮件啦

    msg里的具体信息可以用一般发邮件方式发封邮件测试下

3、参考

http://jingyan.baidu.com/article/b24f6c822784b886bfe5dabe.html

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html

转载请注明来源:http://my.oschina.net/jhao104/blog/613774 

© 著作权归作者所有

共有 人打赏支持
j_hao104
粉丝 202
博文 67
码字总数 101848
作品 2
程序员
私信 提问
加载中

评论(9)

j_hao104
j_hao104

引用来自“少年夏侯寒”的评论

能否实现图片中,那种没有发送人,没有主题的邮件发送呢》???22
那样可能会被服务器拦截,主要看运行商
少年夏侯寒
少年夏侯寒
能否实现图片中,那种没有发送人,没有主题的邮件发送呢》???22
少年夏侯寒
少年夏侯寒
太棒了,这个邮件发送问题我搞了2天,一直有错误,我是照着廖雪峰那个教程来的,最后也是那个554的error,你能不能详细给我讲讲错误原因呢??3
j_hao104
j_hao104

引用来自“郑朔”的评论

飞轮海……
初中的名字 那时候这组合很火
郑朔
郑朔
飞轮海……
j_hao104
j_hao104

引用来自“吐槽的达达仔”的评论

发件人,题目发中文的情况,你怎么办?
我是中文呀 注明编码
j_hao104
j_hao104

引用来自“tony.li”的评论

用程序发163邮件经常会被当作垃圾邮件发不出去,特别是群发时
所以要加上收发件人和主题,不然很容易被当作垃圾邮件
吐槽的达达仔
吐槽的达达仔
发件人,题目发中文的情况,你怎么办?
tony.li
tony.li
用程序发163邮件经常会被当作垃圾邮件发不出去,特别是群发时
Python优雅的操作Exchange邮箱——exchangelib模块使用介绍

最近想把公司邮箱的附件给下载下来,附件好多都是我整理的报告和文档,一个个去下载明显太傻,碰到这种问题第一个想到的就是Python啦 需求很简单,只需要登录自己的Exchange邮箱,然后遍历所...

Bug生活2048
05/15
0
0
(转载)最完整的自动化测试流程:Python编写执行测试用例及定时自动发送最新测试报告邮件

今天笔者就要归纳总结下一整套测试流程,从无到有,实现零突破,包括如何编写测试用例,定时执行测试用例,查找最新生成的测试报告文件,自动发送最新测试报告邮件,一整套完整的测试流程。以...

linux超
07/19
0
0
还在做重复的劳动,不如用Python自动生成Excel以邮件发送

作者:王向君 文章来源:https://zhuanlan.zhihu.com/p/41670796 数据分析师小王每天都要被各种各样的数据数据报表搞得焦头烂额,比如老板的,运营的、产品的等等。而且大部分报表都是重复性...

菜鸟学python
09/02
0
0
python实现自动监控网站并发送邮件告警

通过定时执行python脚本,可以实现定期批量访问网站,如果发现网站打不开,第一时间发邮件到管理员邮箱进行预警 这里用的是python3.5 需要安装的插件: smtplib:发邮件需要用到 pycurl:访问网站时...

马鹏飞
06/26
0
0
每日一道shell练习(04)

1. 习题 设计一个脚本,监控远程的一台主机(假设 ip地址是110.110.110.114)的存活状态,当发现宕机时发一封邮件给你自己。 提示: 你可以使用 ping 命令 : 脚本可以搞成死循环。 2. 习题分...

hello_cjq
04/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
39分钟前
1
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
1
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
1
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
1
0
Android SELinux avc dennied权限问题解决方法

1. 概述 SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。 然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“...

TreasureWe
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部