web-dev-qa-db-fra.com

Comment envoyer un e-mail SMTP pour office365 avec python en utilisant tls / ssl

J'essaie d'envoyer un e-mail à partir de mon compte d'entreprise Office365 en utilisant python. Je suis nouveau sur python. Ce code fonctionnait auparavant lors de l'utilisation de mon compte Hotmail, mais maintenant que j'ai besoin d'envoyer des informations confidentielles, je dois utiliser mon e-mail d'entreprise.

J'ai essayé quelques trucs.

  • Vérifié que mon nom d'utilisateur et mon mot de passe sont corrects.
  • Utilisé à la fois python2 et python3. Les deux donnent la même erreur: 535 5.7.3 Authentication unsuccessful
  • J'utilisais auparavant mailserver.starttls () lorsque j'ai eu l'erreur ci-dessus, puis après quelques recherches, j'ai essayé de passer un
    certificat. mailserver.starttls (certfile = 'office365.cer')

Je ne suis pas clair sur la partie du certificat, mais mes étapes comprennent la recherche en ligne pour savoir comment exporter un certificat. En utilisant le navigateur chrome, microsoftonline.com possède un certificat de chaîne. Je peux exporter la racine et le niveau juste en dessous de la racine mais pas le dernier niveau. Je ne sais pas comment passer ces deux fichiers, j'ai donc simplement passé le certificat racine. À ce stade, j'obtiens l'erreur: ssl.SSLError: [SSL] PEM lib (_ssl.c:3309)

je suis coincé à ce stade. Toute aide est appréciée. Code utilisé ci-dessous

import smtplib

mailserver = smtplib.SMTP('smtp.office365.com',587)
mailserver.ehlo()
mailserver.starttls(certfile='office365.cer')
mailserver.ehlo()
mailserver.login('[email protected]', 'password')
mailserver.sendmail('[email protected]','[email protected]','python email')
mailserver.quit()
9
TKerr

Eh bien, vous y êtes presque. Le code suivant fera l'affaire:

import smtplib

mailserver = smtplib.SMTP('smtp.office365.com',587)
mailserver.ehlo()
mailserver.starttls()
mailserver.login('[email protected]', 'password')
mailserver.sendmail('[email protected]','[email protected]','python email')
mailserver.quit()

Utilisez les liens suivants pour plus d'informations:

http://www.aventistech.com/2016/03/07/python-send-email-via-office-365-tls/

https://docs.python.org/3/library/smtplib.html

https://Gist.github.com/jasonjoh/3ec367594c3fa662ee983a617bdc7deb

14
Gal Silberman

J'ai trouvé une bibliothèque qui fonctionne pour moi:

https://github.com/Narcolapser/python-o365

https://pypi.python.org/pypi/O365

Installez-le en utilisant PIP puis:

from O365 import Message
o365_auth = ('[email protected]','YourPassword')
m = Message(auth=o365_auth)
m.setRecipients('[email protected]')
m.setSubject('I made an email script.')
m.setBody('Talk to the computer, cause the human does not want to hear it any more.')
m.sendMessage()
11
Nacho Parra

Le code a légèrement changé. Le code ci-dessus ne fonctionnera pas. Veuillez utiliser le code ci-dessous. Référence

from O365 import Account

credentials = ('client_id', 'client_secret')

account = Account(credentials)
m = account.new_message()
m.to.add('[email protected]')
m.subject = 'Testing!'
m.body = "George Best quote: I've stopped drinking, but only while I'm asleep."
m.send()
0
Prometheus