使用smtplib SMTP.sendmail发送邮件后如何获取服务器回复

7

我有一个使用Python smtplib发送邮件的程序。我成功地完成了邮件发送部分,但我还需要在发送邮件后捕获服务器返回的消息。例如,当邮件被排队后,postfix会返回以下消息:

reply: '250 2.0.0 Ok: queued as EB83821273B\r\n'
reply: retcode (250); Msg: 2.0.0 Ok: queued as EB83821273B
data: (250, '2.0.0 Ok: queued as EB83821273B')

我真正感兴趣的是错误代码(250)和队列ID(EB83821273B)。如果我设置set_debuglevel(1),我可以打印这些内容,但我需要将其捕获到变量中以进行进一步记录和处理。
谢谢和问候,
拉杰
1个回答

5
如果您在SMTP实例上使用sendmail方法,则它将返回一个字典,每个被拒绝的收件人都有一个条目。每个条目包含SMTP错误代码和服务器发送的相应错误消息的元组。
如果您在同一类上使用docmd方法,则它将返回一个由数字响应代码和实际响应行(多行响应连接为一行)组成的2元组。

值得注意的是,此方法可能会引发以下异常:SMTPHeloError、SMTPRecipientsRefused、SMTPSenderRefused 或 SMTPDataError。 - johnsyweb
1
如果我使用docmd方法,那么基本上我需要逐个重新实现sendmail命令,对吧? - Rajkumar S
2
当状态码为250(一切正常)时,sendmail返回一个空字典。因此,似乎在使用sendmail且没有发生错误时,无法获取服务器响应。 - mrzrm
1
我在响应中得到了一个空字典,但是我没有在我的邮件中看到电子邮件 :( - Umair Ayub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接