zoukankan      html  css  js  c++  java
  • Python—发邮件总结

    来自: http://my.oschina.net/jhao104/blog/613774

    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:Python27libsmtplib.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:Python27libsmtplib.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  

  • 相关阅读:
    Linux操纵体系备份工具Tar运用说明
    Linux琐屑网络设置细致分解
    若何制造Linux系统启动盘2
    RedHatAS5下整合Apache和Tomcat
    移除Linux体系下不需求的效劳
    Linux平安隐患及增强管理的方法1
    Fedora 9 布置好后启动不克不及进入GUI,表现屏表现“Out Of Range"的处理惩罚法子
    Linux和Unix最常用的收集下令
    若何彻底移除编造机Wine模仿程式的图标
    若何制造Linux系统启动盘1
  • 原文地址:https://www.cnblogs.com/AmilyWilly/p/6438455.html
Copyright © 2011-2022 走看看