Отправить письмо, используя мою учетную запись Yahoo - сообщение об ошибке

Я использую Python 3.5.2.

Я пытаюсь использовать мою учетную запись Yahoo для отправки электронной почты. Я использую доменное имя SMTP-сервера Yahoo smtp.mail.yahoo.com в соответствии с этим веб-сайтом ` http://neerajbyte.com/send-email-through-python-console-with-gmail-hotmail-and-yahoo/'. Однако я получил сообщение об ошибке (ниже). Обычно, из соображений безопасности, Google, я пытался, отправлял мне электронное письмо с уведомлением о приложении, пытающемся получить доступ к моей учетной записи, и мне нужно было щелкнуть ссылку, чтобы разрешить это. Но я не получил письмо от Yahoo, а только это сообщение об ошибке, не знаю почему.

это мой код:

>>> 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.
_

1 ответ

Решение

Насколько мне известно, Yahoo и Gmail ожидают двухфакторной аутентификации при попытке входа из приложений. Вот эти шаги:

  1. В Yahoo вы можете перейти к информации об аккаунте.

  2. Нажмите на вкладку Безопасность учетной записи слева. Включите двухэтапную проверку. Затем, когда вы впервые попробуете это, вы получите варианты выбора метода проверки. Обычно я выбираю OTP через SMS.

  3. Затем вы можете управлять паролями приложений. Это вызовет всплывающее окно для генерации 16-символьного пароля. Это то, что вы можете использовать из своего приложения при входе в вашу почту.

Ниже приведен пример скриншота:

Еще один лучший способ использовать строковую переменную пароля ansible vault при написании playbook для почтового модуля. не ставят под угрозу безопасность.

Я реализовал то же самое для отправки электронной почты с помощью почтового модуля, и он работает, как ожидалось.

ansible-vault encrypt_string yourgmailapppassword --name gmail_password

используйте вышеуказанный метод, чтобы зашифровать пароль приложения Gmail с помощью параметра строки ansible vault и определить зашифрованную переменную в playbook.

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

Ниже приведена команда выполнения доступной playbook

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

Следуйте статье https://support.google.com/accounts/answer/185833?hl=en

Создавайте и используйте пароли приложений для уведомлений Gmail с помощью модуля Ansible mail.

сгенерируйте пароль для приложений и используйте тот же 16-значный пароль приложения в своем учебном пособии

     - name: 'доступный почтовый модуль для уведомления Gmail'
      почта:
        хост: smtp.gmail.com
        подтип: html
        порт: 587
        пароль: **************
        на: XXXXXXXXXX@gmail.com
        с: YYYYYYYYYY.YYYY@gmail.com
        имя пользователя: YYYYYYYYYY.YYYY@gmail.com
        тема: Отчет о деталях пользователя
        прикрепить: /tmp/data_details/data_details.csv
        тело:  {{ lookup('файл', '/tmp/data_details/data_details.csv')}} 
      delegate_to: localhost

Теперь попробуйте отправить электронное письмо, оно должно работать. Я успешно протестировал, и он работает.

Другие вопросы по тегам