Python发邮件:发邮件总结
博客专区 > j_hao104 的博客 > 博客详情
Python发邮件:发邮件总结
j_hao104 发表于2年前
Python发邮件:发邮件总结
  • 发表于 2年前
  • 阅读 4248
  • 收藏 146
  • 点赞 8
  • 评论 9

新睿云服务器60天免费使用,快来体验!>>>   

摘要: 今天看了下利用Python发送邮件的教程。发现很多教程讲的都不是很清楚,或者根本运行不起。

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 

标签: python 邮件
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 163
博文 62
码字总数 90544
作品 2
评论 (9)
tony.li
用程序发163邮件经常会被当作垃圾邮件发不出去,特别是群发时
吐槽的达达仔
发件人,题目发中文的情况,你怎么办?
j_hao104

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

用程序发163邮件经常会被当作垃圾邮件发不出去,特别是群发时
所以要加上收发件人和主题,不然很容易被当作垃圾邮件
j_hao104

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

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

引用来自“郑朔”的评论

飞轮海……
初中的名字 那时候这组合很火
少年夏侯寒
太棒了,这个邮件发送问题我搞了2天,一直有错误,我是照着廖雪峰那个教程来的,最后也是那个554的error,你能不能详细给我讲讲错误原因呢??3
少年夏侯寒
能否实现图片中,那种没有发送人,没有主题的邮件发送呢》???22
j_hao104

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

能否实现图片中,那种没有发送人,没有主题的邮件发送呢》???22
那样可能会被服务器拦截,主要看运行商
×
j_hao104
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: