Python发邮件:发邮件总结

1、登录SMTP服务器

==============

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

1import smtplib 2server = smtplib.SMTP('smtp.163.com', 25) 3server.login('j_hao104@163.com', 'password') 4 5Traceback (most recent call last): 6  File "C:/python/t.py", line 192, in <module> 7    server.login('j_hao104@163.com', 'password') 8  File "C:\Python27\lib\smtplib.py", line 622, in login 9    raise SMTPAuthenticationError(code, resp) 10smtplib.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也是如此,因此去设置好客户端密码,再用客户端密码登录。

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

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

(235, 'Authentication successful')

2、发送邮件

=========

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

1import smtplib 2from email.mime.text import MIMEText 3server = smtplib.SMTP('smtp.163.com', 25) 4server.login('j_hao104@163.com', 'clientPassword') 5msg = MIMEText('hello, send by Python...', 'plain', 'utf-8') 6server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string()

    构造MIMEText对象时,第一个参数是邮件正文,第二个参数是MIME的subtype,最后个是编码方式。

sendmail是发邮件方法,第一个参数是发件邮箱,第二个参数是收件人邮箱,是一个列表,代表可以同时发给多个人,as_string是把MIMEText对象变成str。

但是执行结果并不能得到网上说的结果:

而是:

1Traceback (most recent call last): 2  File "C:/python/t.py", line 195, in <module> 3    server.sendmail('j_hao104@163.com', ['946150454@qq.com'], msg.as_string()) 4  File "C:\Python27\lib\smtplib.py", line 746, in sendmail 5    raise SMTPDataError(code, resp) 6smtplib.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……的错误是因为信封发件人和信头发件人不匹配。可以看出看出图片中并没有发件人和主题,所以需要对代码做如下修改:

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )