我正在尝试使用python从我的office365公司帐户发送电子邮件。我是python的新手。此代码以前在使用我的hotmail帐户时有效,但是现在我需要发送机密信息,我必须使用我的公司电子邮件。
我尝试了几件事。
535 5.7.3 Authentication unsuccessful
我不清楚证书部分,但我的步骤包括,在网上查找如何导出证书。使用Chrome浏览器,microsoftonline.com具有链证书。我可以导出root和根目录下面的级别,但不能导出最后一级。我不知道如何传递这两个文件,所以我只是传递了根证书。此时我收到错误:ssl.SSLError: [SSL] PEM lib (_ssl.c:3309)
我被困在这一点上。任何帮助表示赞赏。
下面使用的代码import smtplib
mailserver = smtplib.SMTP('smtp.office365.com',587)
mailserver.ehlo()
mailserver.starttls(certfile='office365.cer')
mailserver.ehlo()
mailserver.login('user@company.co', 'password')
mailserver.sendmail('user@company.co','user@company.co','python email')
mailserver.quit()
答案 0 :(得分:11)
我找到了一个为我工作的图书馆:
https://github.com/Narcolapser/python-o365
https://pypi.python.org/pypi/O365
使用PIP安装它,然后:
from O365 import Message
o365_auth = ('YourAccount@office365.com','YourPassword')
m = Message(auth=o365_auth)
m.setRecipients('reciving@office365.com')
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()
答案 1 :(得分:10)
import smtplib
mailserver = smtplib.SMTP('smtp.office365.com',587)
mailserver.ehlo()
mailserver.starttls()
mailserver.login('user@company.co', 'password')
mailserver.sendmail('user@company.co','user@company.co','python email')
mailserver.quit()
使用以下链接获取更多信息:
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
答案 2 :(得分:2)
最有可能,问题不在您的代码中,而是在Exchange Online配置中。
我敢打赌535 5.7.3 Authentication unsuccessful
被抛出,因为在您的Exchange Online组织中已禁用经过身份验证的SMTP(SMTP AUTH协议)。
Here,您可以找到我的答案,解释了如何为发送电子邮件的用户启用SMTP AUTH。您必须是Office 365组织管理员才能执行此操作,也可以向管理员寻求帮助。
之后,mailserver.starttls()
应该可以工作了。请注意,您无需在该呼叫中指定证书。
答案 3 :(得分:1)
代码略有更改。上面的代码不起作用。请使用以下代码。 Reference
from O365 import Account
credentials = ('client_id', 'client_secret')
account = Account(credentials)
m = account.new_message()
m.to.add('to_example@example.com')
m.subject = 'Testing!'
m.body = "George Best quote: I've stopped drinking, but only while I'm asleep."
m.send()