【发布时间】:2020-01-08 09:47:49
【问题描述】:
我们编写了一个小 Python 程序,我们想在其中向我们的邮件地址发送邮件。我们有一些代码,但是当它即将完成时它会停止并打印错误消息。确切地说,它停在server.sendmail。当我们打印 config.EMAIL_ADDRESS 和 config.PASSWORD 时,我们会收到正确的凭据,所以这不是问题(配置是我们存储凭据的位置)。
我们在 ubuntu 服务器上使用 python3。
import config
import smtplib
def send_mail(subject, msg):
try:
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo()
server.starttls()
print (f'EMAIL = {config.EMAIL_ADDRESS} & PASSWORD = {config.PASSWORD}')
server.login(config.EMAIL_ADDRESS, config.PASSWORD)
message = 'Subject: {}\n\n{}'.format(subject, msg)
server.sendmail(config.EMAIL_ADDRESS, config.EMAIL_ADDRESS, message)
server.quit()
print ("Successfully sent email")
except SMTPException:
print ("Error: unable to send email")
subject = "ALERT!!!"
msg = "LPN SENDER IKKE DATA!!! GØR NOGET VED DET!!!"
send_mail(subject, msg)
我们已经打开了 25 和 587 端口,这应该不是问题。我们不知道还能做什么。也许这里有人可以帮助我们。我们还需要建立安全连接。这安全吗?如果没有,我们可以做些什么来确保我们的邮件传输安全?
更新
错误代码
File "Alarm.py", line 21, in send_mail
server.sendmail(config.EMAIL_ADDRESS, config.EMAIL_ADDRESS, message)
File "/usr/lib/python3.6/smtplib.py", line 855, in sendmail
msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\xd8' in position 46: ordinal not in range(128)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "Alarm.py", line 48, in <module>
send_mail(subject, msg)
File "Alarm.py", line 25, in send_mail
except SMTPException:
NameError: name 'SMTPException' is not defined
【问题讨论】:
-
哦,我自己在使用 gmail 和 python 时遇到了问题!让我找到最终起作用的代码。
-
谢谢!那太棒了!
-
删除
try...except或重新引发异常,以便您(以及我们,如果您在问题中发布完整的错误堆栈)了解 究竟是什么失败. -
过去我不得不打开“不太安全的应用程序访问”,但那是 ssl。 support.google.com/accounts/answer/6010255?hl=en
-
根据错误消息并计算字符数,消息中的第 46 个字符是
Ø。也许这可以帮助:stackoverflow.com/questions/8329741