如何使用 Python 发送电子邮件?

How send email with Python?

提问人:Luka 提问时间:7/22/2023 最后编辑:Luka 更新时间:7/23/2023 访问量:148

问:

执行以下代码后,它会显示一条消息“smtplib.SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6')“ 登录名和密码正确,专为测试而创建的电子邮件。登录失败的原因可能是什么?

import smtplib

mailFrom = "Test email sends"
mailTo = ["[email protected]"]
mailSubjest = "Test message"
mailBody = '''
email
    test
        test
'''

msg = '''From: {}
Subject: {}

{}
'''.format(mailFrom,mailSubjest,mailBody)

user = "[email protected]"
password = "pwd"
server = smtplib.SMTP_SSL('SMTP.poczta.onet.pl', 465)
server.ehlo()
server.login(user, password)
server.sendmail(user, mailTo, msg)
server.close()

我尝试过更改端口、电子邮件服务提供商和主机。启动程序后,将发送一封测试电子邮件。

server.set_debuglevel(1) 输出:

send: 'ehlo [192.168.0.19]\r\n'
reply: b'250-smtp.poczta.onet.pl\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-SIZE 90000000\r\n'
reply: b'250-ETRN\r\n'
reply: b'250-AUTH PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-AUTH=PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250 8BITMIME\r\n'
reply: retcode (250); Msg: b'smtp.poczta.onet.pl\nPIPELINING\nSIZE 90000000\nETRN\nAUTH PLAIN LOGIN XOAUTH2\nAUTH=PLAIN LOGIN XOAUTH2\nENHANCEDSTATUSCODES\n8BITMIME'
send: 'AUTH PLAIN AHB5dGhvbjEyMzMyMXRlc3Rvd3lAb3AucGwAUXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: \r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed:'
send: 'AUTH LOGIN cHl0aG9uMTIzMzIxdGVzdG93eUBvcC5wbA==\r\n'
reply: b'334 UGFzc3dvcmQ6\r\n'
reply: retcode (334); Msg: b'UGFzc3dvcmQ6'
send: 'UXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6\r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6'
send: 'quit\r\n'
reply: b'221 2.0.0 Bye\r\n'
reply: retcode (221); Msg: b'2.0.0 Bye'
python-3.x 电子邮件 sendmail smtplib

评论

0赞 Alias Cartellano 7/22/2023
尝试查看如何使用 Python 发送电子邮件?

答:

0赞 AnFi 7/22/2023 #1

打开调试/跟踪 SMTP 会话。它经常提供更多提示。
使用set_debuglevel

在这个特定的SMTP服务器的情况下,我记得偶尔会拒绝每次登录尝试几个小时。它并不常见,但不是(非常)率AFAIR。

评论

0赞 Luka 7/23/2023
我使用set_debuglevel和广告输出来提问。
0赞 Luka 7/23/2023 #2

该问题已使用 Papercute 和 localhost 服务器 SMTP 解决。仅使用 Windows 进行执行。

法典:

import smtplib

def send_mail_python():
    mailFrom = "[email protected]"
    mailTo = ["[email protected]"]
    mailSubjest = "Test message"
    mailBody = '''
    email
        test
            SMTP Python server
    '''

    msg = '''From: {}
    Subject: {}

    {}
    '''.format(mailFrom, mailSubjest, mailBody)

    try:
        server = smtplib.SMTP('127.0.0.1', 25)
        server.sendmail(mailFrom, mailTo, msg)
        server.close()
    except Exception as e:
        print("any error messages to stdout")
        print(e)
        pass

解决方案未解决上述问题。它允许您在本地检查代码并执行测试。