Python SMTPLib无法再进行身份验证,但django仍然可以在同一台计算机上发送电子邮件

时间:2016-05-16 14:57:58

标签: python django email exchange-server smtplib

我们运行一个通宵脚本,向我们公司的一群人发送电子邮件。几天前,连接已经打开很长一段时间并最终超时,从那时起我们就无法在同一台机器上使用相同的代码连接到Exchange SMTP服务器。 Django配置为使用相同的确切设置,在同一台服务器上运行,并继续发送任何错误电子邮件。此外,在不同的服务器上运行相同的代码,我们仍然可以连接和发送电子邮件。我对原因和潜在解决方案感到十分困惑。

铊; DR:

  • Python SMTPlib曾经在几天前的超时之前在此服务器上正常工作
  • Django可以使用相同的身份验证信息从同一台服务器发送电子邮件
  • 具有相同登录信息的相同代码在不同服务器上运行时仍会进行身份验证

电子邮件连接器:

git format-patch $(git log --reverse --author="John Doe" --pretty="%H" -- the/needed/path | awk '{print -NR, " ", $0}')

代码的调用如下:

class Email_Connect(object):
    def __init__(self):
        self.user = "mydomain\myuser"
        self.pwd = "mypassword"  
        self.send_from = 'myuser@mycompany.com'
        self.local_hostname = socket.getfqdn()

    def smtp_conn(self,server='myrelay.mycompany.net'):
        self.c = smtplib.SMTP(server, local_hostname=self.local_hostname)
        self.c.set_debuglevel(1)
        self.c.ehlo()
        self.c.starttls()
        self.c.ehlo()
        self.c.login(self.user, self.pwd)

Django邮件设置(在同一台机器上正常工作):

emailer = common.Email_Connect()
emailer.smtp_conn()
emailer.send_email(send_to,msg_subject,msg_body,None,attachment)
emailer.close()

这是运行代码的完整调试输出:

DEFAULT_FROM_EMAIL = 'myuser@mycompany.com'
SERVER_EMAIL = 'myuser@mycompany.com'
EMAIL_USE_TLS = True
EMAIL_HOST = "myrelay.mycompany.net"
EMAIL_HOST_USER = "myuser"
EMAIL_HOST_PASSWORD = "mypassword"

1 个答案:

答案 0 :(得分:0)

事实证明问题是由Exchange期望Windows身份验证而不是LOGIN命令引起的。我碰巧注释掉了login()行,现在我可以成功发送电子邮件了。

我仍然不知道为什么这段代码成功运行并突然停止工作,但解决办法是保持一切正常并停止传递登录命令。