python - 如何在 Django 中获取 SMTP 服务器响应代码?
问题描述
目标:
你好!如何通过 Django 获取 SMTP 响应代码,类似于从smtplib
模块给出的返回值???我想使用 Django 的 api 而不是必须使用它,而且我在Django 的电子邮件文档中什么也看不到。
我知道send_mail()
, send_mass_mail()
, 并且EmailMessage.send_messages(...)
都有返回值,显示成功传递的消息的数量......但我想要所有这些的响应代码。关键是要证明已发送电子邮件、错误的电子邮件地址等,例如smtp 响应代码显示。
它在我看来就像我必须为此制作一个自定义电子邮件后端,并从BaseEmailBackend
...子类化它smtplib
无论如何都在使用。
smtplib
的响应代码的示例代码
import smtplib
obj = smtplib.SMTP('smtp.gmail.com', 587)
response = obj.ehlo()
print(response)
# Obviously this doesn't send a message yet, but I want response[0]
(250, b'smtp.gmail.com at your service, [111.222.33.44]\nSIZE 31234577\n8BITMIME\nSTARTTLS\nENHANCEDSTATUSCODES\nPIPELINING\nCHUNKING\nSMTPUTF8')
解决方案
如果您只想检查邮件是否已发送,您可以使用send_mail()
函数的返回值
返回值将是成功传递的消息数(可以是 0 或 1,因为它只能发送一条消息)。
Django 确实捕获 smtplib 错误并在发生任何错误时返回 0,如果 fail_silently 为 false(默认为 true)则返回异常
从django.core.mail.backends.smtp.EmailBackend
源_send
():
try: self.connection.sendmail(from_email, recipients, message.as_bytes(linesep='\r\n')) except smtplib.SMTPException: if not self.fail_silently: if not self.fail_silently: raise return False return True
同样的事情open()
推荐阅读
- java - 如何将两个表记录映射到java对象列表
- go - VS Code Go 扩展由于无法更改 go.mod 而无法加载?
- c - 为什么用浮点数除以整数会导致浮点数?
- asp.net-core - 如何在 Azure AD 中使用自定义 IUserRoleStore
- rust - 当忽略某些值时,如何在迭代器实现中避免不必要的昂贵操作?
- javascript - Apache Synapse 中没有 setPayloadJSON()
- python-3.x - 按年重设的累计金额
- bash - 如何在 '< 之间调用代码
我想使用“调用系统”在“<<EOF ... EOF”之间调用代码以使用gnuplot(没有file.plt)进行绘图。以下是我希望与“呼叫系统”一起使用的代码的一般示例:
gnuplot -persist <<EOF set title "graf
- r - 如何创建一个向量,用 R 中的某个值替换所有值与 NA 和 NA
- algorithm - 求解运行时间 Big Theta 表示法