如何使用Python发送经过身份验证的电子邮件?

如何使用Python发送经过身份验证的电子邮件?,python,smtplib,Python,Smtplib,我有一个python函数来发送电子邮件通知。我已经包括了登录呼叫,以通过我的本地SMTP服务器进行身份验证,但是返回的电子邮件说明“553邮件被拒绝,因为您的IP在PBL中”。进一步阅读后发现,显然我并没有被阻止发送电子邮件,我只是被要求首先进行身份验证 我尝试了base64编码,以避免以纯文本形式发送密码,但没有成功 我还查看了Pysasl库,但我有点不确定如何使用它对SMTP服务器进行身份验证 对于base64编码、pysasl库的正确使用,或者是否有更好的方法来满足正确的身份验证要求,有人

我有一个python函数来发送电子邮件通知。我已经包括了登录呼叫,以通过我的本地SMTP服务器进行身份验证,但是返回的电子邮件说明“553邮件被拒绝,因为您的IP在PBL中”。进一步阅读后发现,显然我并没有被阻止发送电子邮件,我只是被要求首先进行身份验证

我尝试了base64编码,以避免以纯文本形式发送密码,但没有成功

我还查看了Pysasl库,但我有点不确定如何使用它对SMTP服务器进行身份验证

对于base64编码、pysasl库的正确使用,或者是否有更好的方法来满足正确的身份验证要求,有人有什么指导吗

我的代码如下

def emailNotify(self,userid):
    SMTPserver = 'localhost'
    sender = '***'  # blanked
    username = '***' # blanked
    receiver = '***' # blanked
    pwd = '***'  # blanked
    text_subtype = 'plain'

    msg = 'requested data was posted to dashboard for '+userid

    subject = 'confirmation of POST\'d data for '+userid

    try:
        msg = MIMEText(msg, text_subtype)
        msg['Subject'] = subject
        msg['From'] = sender

        conn = smtplib.SMTP(SMTPserver)
        conn.login(username, pwd)
        try:
            conn.sendmail(sender, receiver, msg.as_string())
        finally:
            conn.quit()
    except:
        print('message sending failed')

提前感谢。

您有两种方法构建发送邮件的程序:

  • 构建防弹解决方案:

    • 分析服务器宣布的功能
    • 选择一个更好地满足您的要求
    • 使用该身份验证方法
    • 实际发送邮件
    简单地说,这意味着您必须实现用于读取和解码服务器返回的内容(这可能很奇怪)以及所有各种身份验证方法的代码,更不用说TLS了

  • 使用适用于该服务器的自定义连接方法

    • 阅读服务器的文档,了解它声明要支持的内容
    • 首先通过一个简单的telnet连接手动测试它,然后在一个交互式Python会话中进行测试(这里空闲就足够了,但是您可以选择您喜欢的Python shell)
    • 按照您刚刚测试过的方式仔细编程-但如果服务器功能发生变化,请留下相关错误消息
    我觉得简单多了


至于我,问题不在于你的Python代码,而在于你的SMTP服务器及其配置——其他服务器可能会将它们视为发送垃圾邮件的假服务器,因此它们会拒绝来自你服务器的邮件。在其他服务器(如GMail)上使用帐户尝试你的Python代码,可能会奏效。我认为返回电子邮件的原因是因为我发送了一个纯文本密码,而我的IP在PBL(策略阻止列表)中,这似乎是一个自愿列表。SBL是我的IP不在的垃圾邮件阻止列表。我正在寻找一种编码或散列此密码的方法。我已包括登录调用以通过我的本地SMTP服务器进行身份验证,但返回的电子邮件中声明“。。。。本地服务器叫什么?一个在本地计算机(本地主机)上运行?如果是,您应该知道它是如何配置的…我确实知道,上面的代码可以从本地邮件服务器发送邮件。问题是,由于IP位于PBL上,所以无法交付。当IP位于PBL上时,所有电子邮件都必须经过身份验证。上面的代码进行身份验证,但是密码是明文的。我相信这就是为什么从这个代码发送的电子邮件被拒绝的原因。