【问题标题】:Python 3 | Send email -- SMTP -- gmail -- Error : SMTPException蟒蛇 3 |发送电子邮件 -- SMTP -- gmail -- 错误:SMTPException
【发布时间】:2013-06-24 07:39:26
【问题描述】:

我想使用 Python 3 发送一封电子邮件。我还无法理解我所看到的示例。这是一个参考:Using Python to Send Email

我提取了上述参考资料中的第一个简单示例。我发现这个例子很好地代表了我在互联网上看到的例子的组合。这似乎是做我想做的事情的基本形式。

当我尝试下面的代码时,我收到错误:

File "C:\Python33\Lib\email.py", line 595, in login
    raise SMTPException("SMTP AUTH extension not supported by server.")
smtplib.SMTPException: SMTP AUTH extension not supported by server.

代码如下:

# Send Mail

import smtplib
server = smtplib.SMTP('smtp.gmail.com', 587)

# Log in to the server
server.login("myEmail@gmail.com","myPassword")

# Send mail
msg = "\nHello!"
server.sendmail("myEmail@gmail.com","recipient@gmail.com", msg)

【问题讨论】:

    标签: email python-3.x smtp-auth


    【解决方案1】:

    我在 YouTube 上找到了解决方案。

    这里是video link

    # smtplib module send mail
    
    import smtplib
    
    TO = 'recipient@mailservice.com'
    SUBJECT = 'TEST MAIL'
    TEXT = 'Here is a message from python.'
    
    # Gmail Sign In
    gmail_sender = 'sender@gmail.com'
    gmail_passwd = 'password'
    
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_sender, gmail_passwd)
    
    BODY = '\r\n'.join(['To: %s' % TO,
                        'From: %s' % gmail_sender,
                        'Subject: %s' % SUBJECT,
                        '', TEXT])
    
    try:
        server.sendmail(gmail_sender, [TO], BODY)
        print ('email sent')
    except:
        print ('error sending mail')
    
    server.quit()
    

    【讨论】:

      【解决方案2】:

      截至 2017 年 10 月中旬,Gmail 不再接受通过端口 587 上的 smtplib.SMTP() 的连接,但需要 smtplib.SMTP_SSL() 和端口 465。这会立即启动 TLS,并且不需要 ehlo。试试这个 sn-p:

      # Gmail Sign In
      gmail_sender = 'sender@gmail.com'
      gmail_passwd = 'password'
      
      server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
      server.login(gmail_sender, gmail_passwd)
      
      # build and send the email body.
      

      【讨论】:

      • 刚试了一下..我想知道我可以在本地使用这个,但不能从我的服务器上使用,因为谷歌仍然说Please log in via your web browser and\n5.7.14 then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/answer/78754
      • 你好像错了。截至 2020 年 3 月 28 日,今天的 Gmail 似乎在端口 587 上接受。但是,您需要将此 gmail 帐户启用为“不安全”帐户,这被 Gmail 安全监控视为漏洞。但是你仍然可以发送这种“不安全”的方式,它实际上在我的系统中工作,消息确实被发送并到达目标邮箱;全部通过端口 587。
      • @gies0r 您需要在您的 gmail 帐户设置中禁用双因素身份验证才能正常工作。
      • 但是我使用 Java SSL 发送到 587,一切似乎都还好。尝试在端口 smtplib.SMTP_SSL 上使用 smtplib.SMTP_SSL 登录时,Python v.3.6.9 报告“ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] 版本号错误”。 Java Oracle JDK 没有报告这一点。
      • @gies0r 当用户使用 SSL 在端口 465 上从 Gmail 未知的 IP 地址登录时,用户会得到 smtplib.SMTPAuthenticationError: (534, b'5.7.14 <...\n5.7.14 ...\n5.7.14 ...>\n5.7.14 Please log in via your web browser and then try again.\n5.7.14 Learn more at\n5.7.14 https://support.google.com/mail/answer/78754 ... - gsmtp')。您需要进入 gmail 帐户设置并确认此 IP 地址是安全的,之后您可以登录并使用 Python API 发送。
      【解决方案3】:

      这就是我使用 Google 发送电子邮件的方式。大写字母代表需要编辑的个人信息

      try:
          import RUNNING_SCRIPT
      except:
          print("threw exception")
          # smtplib module send mail
      
          import smtplib
      
          TO = ‘EXAMPLE_RECIPIENT@gmail.com'
          SUBJECT = 'SERVER DOWN'
          TEXT = 'Here is a message from python. Your server is down, please check.'
      
          # Gmail Sign In
          gmail_sender = ‘YOUR_GMAIL_ACCOUNT@gmail.com'
          gmail_passwd = ‘APPLICATION SPECIFIC PASSWORD’
      
          server = smtplib.SMTP('smtp.gmail.com', 587)
          server.ehlo()
          server.starttls()
          server.login(gmail_sender, gmail_passwd)
      
          BODY = '\r\n'.join(['To: %s' % TO, 'From: %s' % gmail_sender,'Subject: %s' % SUBJECT,'', TEXT])
      
          try:
              server.sendmail(gmail_sender, [TO], BODY)
              print ('email sent')
          except:
              print ('error sending mail')
              server.quit()
      

      【讨论】:

        【解决方案4】:

        这个功能对我有用:

        `def server_connect(帐户,密码,服务器,端口= 587): if int(port) == 465: # gmail 服务器 email_server = smtplib.SMTP_SSL(服务器,str(端口)) 别的: email_server = smtplib.SMTP(服务器,端口) email_server.ehlo() email_server.starttls() email_server.login(帐户,密码) 返回 email_server #-------- `

        我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2022-01-21
          • 1970-01-01
          • 2017-02-09
          • 2014-10-19
          • 2014-01-04
          • 1970-01-01
          • 1970-01-01
          • 2016-10-25
          • 1970-01-01
          相关资源
          最近更新 更多