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

时间:2017-01-20 15:46:53

标签: python smtplib

我有一个python函数来发送电子邮件通知。我已将登录呼叫包含在我的本地SMTP服务器中进行身份验证,但是正在返回电子邮件,说明“553邮件被拒绝,因为您的IP在PBL中”。进一步阅读https://www.spamhaus.org/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')

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

  • 构建防弹解决方案:

    • 分析服务器宣布的功能
    • 选择更符合您要求的
    • 使用该身份验证方法
    • 实际发送邮件

    简单地说,这意味着您必须实现用于读取和解码服务器返回的代码(可能很奇怪)以及所有各种身份验证方法,而不是TLS

  • 使用适用于 服务器

    的自定义连接方法
    • 阅读服务器的文档以了解它声明支持的内容
    • 首先通过单独的telnet连接手动测试,然后在交互式Python会话中进行测试(空闲就够了,但你可以选择你喜欢的Python shell)
    • 仔细编程您刚刚测试过的方式 - 但在服务器功能发生变化的情况下会留下相关的错误消息......

    恕我直言......更简单......