【问题标题】:Sending e-mails using yahoo account in python在 python 中使用 yahoo 帐户发送电子邮件
【发布时间】:2013-04-29 04:36:36
【问题描述】:

我有yahoo 帐户。 是否有任何 python 代码可以从我的帐户发送电子邮件?

【问题讨论】:

    标签: python email smtp


    【解决方案1】:

    是的;这是代码:

    import smtplib
    fromMy = 'yourMail@yahoo.com' # fun-fact: from is a keyword in python, you can't use it as variable, did abyone check if this code even works?
    to  = 'SomeOne@Example.com'
    subj='TheSubject'
    date='2/1/2010'
    message_text='Hello Or any thing you want to send'
    
    msg = "From: %s\nTo: %s\nSubject: %s\nDate: %s\n\n%s" % ( fromMy, to, subj, date, message_text )
    
    username = str('yourMail@yahoo.com')  
    password = str('yourPassWord')  
    
    try :
        server = smtplib.SMTP("smtp.mail.yahoo.com",587)
        server.login(username,password)
        server.sendmail(fromMy, to,msg)
        server.quit()    
        print 'ok the email has sent '
    except :
        print 'can\'t send the Email'
    

    【讨论】:

    • server.starttls() 应该在 server.login 行之前添加,否则会抛出异常。
    • SMTP AUTH extension not supported by server.
    • 您必须在设置中启用应用身份验证才能执行此操作。
    • @AceofSpade 我刚刚在帐户信息->帐户安全->“允许使用不太安全登录的应用程序”中执行此操作。你指的是这个吗?
    • 我的“帐户安全”页面没有任何按钮/链接来允许这些应用程序...他们删除了这个吗?编辑:@user6972 的评论修复了这个“SMTP AUTH”错误,没有对 yahoo 帐户进行任何修改。
    【解决方案2】:

    关于使用 yahoo 的 smtp 服务器,我绞尽脑汁(简短地)。 465 是行不通的。我决定通过端口 587 进行 TLS 路由,我能够进行身份验证和发送电子邮件。

    import smtplib
    from email.mime.text import MIMEText
    SMTP_SERVER = "smtp.mail.yahoo.com"
    SMTP_PORT = 587
    SMTP_USERNAME = "username"
    SMTP_PASSWORD = "password"
    EMAIL_FROM = "fromaddress@yahoo.com"
    EMAIL_TO = "toaddress@gmail.com"
    EMAIL_SUBJECT = "REMINDER:"
    co_msg = """
    Hello, [username]! Just wanted to send a friendly appointment
    reminder for your appointment:
    [Company]
    Where: [companyAddress]
    Time: [appointmentTime]
    Company URL: [companyUrl]
    Change appointment?? Add Service??
    change notification preference (text msg/email)
    """
    def send_email():
        msg = MIMEText(co_msg)
        msg['Subject'] = EMAIL_SUBJECT + "Company - Service at appointmentTime"
        msg['From'] = EMAIL_FROM 
        msg['To'] = EMAIL_TO
        debuglevel = True
        mail = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        mail.set_debuglevel(debuglevel)
        mail.starttls()
        mail.login(SMTP_USERNAME, SMTP_PASSWORD)
        mail.sendmail(EMAIL_FROM, EMAIL_TO, msg.as_string())
        mail.quit()
    
    if __name__=='__main__':
    send_email()
    

    【讨论】:

    • 我有错误:smtplib.SMTPServerDisconnected: Connection unexpectedly closed 但我已经通过转到我的雅虎“帐户安全”设置并选中“允许使用不太安全登录的应用”选项来解决它
    【解决方案3】:

    访问雅虎账号安全页面here

    您需要生成一个应用密码 - 这是屏幕底部的一个选项。在脚本中使用 Yahoo 在此页面上生成的密码。

    【讨论】:

      【解决方案4】:

      支持非ASCII字符;你可以使用email package:

      #!/usr/bin/env python
      # -*- coding: utf-8 -*-
      from email.header    import Header
      from email.mime.text import MIMEText
      from getpass import getpass
      from smtplib import SMTP_SSL
      
      # provide credentials
      login = 'you@yahoo.com'
      password = getpass('Password for "%s": ' % login)
      
      # create message
      msg = MIMEText('message body…', 'plain', 'utf-8')
      msg['Subject'] = Header('subject…', 'utf-8')
      msg['From'] = login
      msg['To'] = ', '.join([login, ])
      
      # send it   
      s = SMTP_SSL('smtp.mail.yahoo.com', timeout=10) #NOTE: no server cert. check
      s.set_debuglevel(0)
      try:
          s.login(login, password)
          s.sendmail(msg['From'], msg['To'], msg.as_string())
      finally:
          s.quit()
      

      【讨论】:

        【解决方案5】:

        有几个问题。一个已通过已发布的答案解决。

        1. 使用 TLS(端口 465)
        2. 确保您有应用程序密码。雅虎和其他电子邮件服务已更新其身份验证做法,以限制无需 2 因素身份验证即可登录的内容。如果您想使用 smtplib 进行身份验证,您需要在此处创建应用密码:https://login.yahoo.com/myaccount/security/app-password

        如果你这样做了,那么你就可以发送电子邮件了

        【讨论】:

          【解决方案6】:

          一年半以来,我的以下 def 在 PC 和 Pi 上运行良好。我有一个脚本每周六中午通过电子邮件发送给我,作为一般健康检查。工作部分是..

          def my_callback():  
              server = smtplib.SMTP('smtp.mail.yahoo.com:587')
              server.starttls()
              server.login(username,password)
              server.sendmail(fromaddr, toaddrs, message)
              server.quit()
          

          大约两周前,它停止在我的所有设备上运行。运行脚本我发现“server.starttls()”行是失败的根源。环顾四周,我发现恢复到端口 465 和 SSL,删除 server.starttls() 解决了这个问题。

          def my_callback():  
              server = smtplib.SMTP_SSL('smtp.mail.yahoo.com', 465)
              server.login(username,password)
               server.sendmail(fromaddr, toaddrs, message)
              server.quit()
          

          其他人有这个问题吗?雅虎改变了什么?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-01-26
            • 1970-01-01
            • 2010-12-19
            • 1970-01-01
            • 2012-03-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多