Отправить письмо, используя мою учетную запись 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 ожидают двухфакторной аутентификации при попытке входа из приложений. Вот эти шаги:
В Yahoo вы можете перейти к информации об аккаунте.
Нажмите на вкладку Безопасность учетной записи слева. Включите двухэтапную проверку. Затем, когда вы впервые попробуете это, вы получите варианты выбора метода проверки. Обычно я выбираю OTP через SMS.
Затем вы можете управлять паролями приложений. Это вызовет всплывающее окно для генерации 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
Теперь попробуйте отправить электронное письмо, оно должно работать. Я успешно протестировал, и он работает.