使用我的雅虎帐户发送电子邮件 - 错误消息

时间:2016-12-01 07:34:44

标签: python email smtp smtplib yahoo-mail

我使用的是Python 3.5.2。

我正在尝试使用我的雅虎帐户发送电子邮件。我根据这个网站“http://neerajbyte.com/send-email-through-python-console-with-gmail-hotmail-and-yahoo/'使用雅虎SMTP服务器域名 smtp.mail.yahoo.com 。但是我收到了一条错误消息(如下)。通常出于安全原因谷歌,我试过,会给我发电子邮件通知我一个试图访问我的帐户的应用程序,我必须点击链接以允许它。但我没有收到来自雅虎的电子邮件,但只是这个错误信息,不知道为什么。

这是我的代码:

>>> import smtplib
>>> conn = smtplib.SMTP('smtp.mail.yahoo.com', 587)
>>> type(conn)
<class 'smtplib.SMTP'>
>>> conn
<smtplib.SMTP object at 0x02AD9A70>
>>> conn.ehlo()
(250, b'smtp.mail.yahoo.com\nPIPELINING\nSIZE 41697280\n8 BITMIME\nSTARTTLS')
>>> conn.starttls
<bound method SMTP.starttls of <smtplib.SMTP object at 0x02AD9A70>>
>>> conn.login('j@yahoo.com', 'j2')

这是我的错误消息:

_Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    conn.login('j@yahoo.com', 'j2')
  File "C:\Users\J\AppData\Local\Programs\Python\Python35-32\lib\smtplib.py", line 696, in login
    "SMTP AUTH extension not supported by server.")
smtplib.SMTPNotSupportedError: SMTP AUTH extension not supported by server.
_

3 个答案:

答案 0 :(得分:2)

据我所知,雅虎和Gmail在尝试从应用登录时需要双因素身份验证。这些是步骤:

  1. 在Yahoo中,您可以访问帐户信息。

  2. 单击左侧的“帐户安全”选项卡。启用两步验证。我第一次尝试这个时你会得到选择验证方法的选项。通常我会通过短信选择OTP。

  3. 然后您可以管理应用密码。这将弹出一个弹出窗口以生成一个16个字符的密码。这是您登录邮件时可以在应用中使用的内容。

  4. 以下是截图示例: enter image description here

答案 1 :(得分:0)

遵循文章https://support.google.com/accounts/answer/185833?hl=en

使用ansible邮件模块为Gmail通知创建和使用应用密码。

生成Apps密码,并在可访问的剧本中使用相同的16位数字应用密码

     - name: 'ansible mail module to gmail notification'
      mail:
        host: smtp.gmail.com
        subtype: html
        port: 587
        password: **************
        to: XXXXXXXXXX@gmail.com
        from: YYYYYYYYYY.YYYY@gmail.com
        username: YYYYYYYYYY.YYYY@gmail.com
        subject: User details report
        attach: /tmp/data_details/data_details.csv
        body:  {{ lookup('file', '/tmp/data_details/data_details.csv') }} 
      delegate_to: localhost

现在尝试发送电子邮件,它应该可以工作。 我已经测试成功,并且可以正常工作。

enter image description here

答案 2 :(得分:0)

为邮件模块编写剧本时使用ansible Vault密码字符串变量的另一种最佳方法。不会危害安全风险。

我已经实现了使用邮件模块发送电子邮件的功能,并且可以正常工作。

ansible-vault encrypt_string yourgmailapppassword --name gmail_password

使用上述方法使用ansible保险库字符串选项对gmail应用程序密码进行加密,并将加密后的变量定义到剧本中。

cat fetch-users-deatils.yml

    - name: Linux servers user audit report preparation
      hosts: "{{ HOSTS }}"
      roles:
        - user-collections
    
    - name: Refreshing user Dashboard & sending email from localhost
      hosts: localhost
      become: false
      vars:
       - gmail_password: !vault |
              $ANSIBLE_VAULT;1.1;AES256
              62613232383962323430633831113465356231563163366235353034393230656331663436646233
              3266353862303738303737383530313664356135336661390a336562613436626665333833323030
              61393135643433313930643337363465343332353716333831222766376137396430426361663633
              6233313433633231320a663435636230636431643731333166366435346564316331323361633566
              38622138392437888466666535323432653034323936353961646233613437343831
      tasks:
        - name: Collecting the user details information and recreating the users dashboard
          script: dashboard_user.sh
          tags: user_dashboard
    
    
        - name: User Audit data output file stored on below location
          debug:
            msg:
             /tmp/user_collection/user_details.csv
    
        - name: 'Sending Ansible users report email'
          mail:
            host: smtp.gmail.com
            subtype: html
            port: 587
            password: "{{ gmail_password }}"
            to: abcdefghijkl@gmail.com
            from: abcdefghijkl@gmail.com
            username: abcdefghijkl@gmail.com
            subject: User details report
            attach: /tmp/user_collection/user_details.csv
            body: <pre> {{ lookup('file', '/tmp/user_collection/user_details.csv') }} </pre>
          delegate_to: localhost

下面是一个有趣的剧本执行命令

ansible-playbook fetch-users-deatils.yml -e "HOSTS=all" --ask-vault-pass