我在一台设备上遇到“SMPTHeloError: (501, b'语法无效的 HELO 参数')”,但在其他设备上则没有遇到问题

问题描述 投票:0回答:1

我正在制作一个程序,该程序应该定期向我发送电子邮件,以便我可以对工作设备进行定期状态检查。我需要使用该程序的计算机在

SMPTHeloError: (501, b'Syntactically invalid HELO argument(s)')
行给出了错误
server.login(from_address, password)

当我在我的个人笔记本电脑上测试时,代码执行得很好,当我在另一台计算机上测试时,它也运行得很好。我已经四处寻找解决方案,但我所能找到的只是主机名可能是错误的,但如果我理解正确的话,我认为这不是问题,因为我检查了我的设备名称,它没有任何下划线或无效字符,其结构与我的个人笔记本电脑相同,执行代码没有问题。

这是一些示例Python代码:

import smtplib, ssl
from email.message import EmailMessage

def compile_email():
    # Compiles an email to send for regular status updates.
    emailMsg = "Email contents"    
    msg=EmailMessage()
    msg['Subject'] = "Status Update"
    msg['From'] = "Status Updater <[email protected]>"
    msg['To'] = "John Doe <[email protected]>"
    msg.set_content(emailMsg)
    from_address = '[email protected]'
    password = "password"
    
    context = ssl.create_default_context()
    with smtplib.SMTP_SSL("mail.domain.com", 465, context=context) as server:
        server.set_debuglevel(1)
        server.login(from_address, password)
        server.send_message(msg)

这是我从中得到的文字记录:

send: 'ehlo DESKTOP-7HJ08AV.NetisRouter_64eeb7fe9daa\r\n'
reply: b'501 Syntactically invalid EHLO argument(s)\r\n'
reply: retcode (501); Msg: b'Syntactically invalid EHLO argument(s)'
send: 'helo DESKTOP-7HJ08AV.NetisRouter_64eeb7fe9daa\r\n'
reply: b'501 Syntactically invalid HELO argument(s)\r\n'
reply: retcode (501); Msg: b'Syntactically invalid HELO argument(s)'
send: 'QUIT\r\n'
reply: b'221 de219.cloudys.net closing connection\r\n'
reply: retcode (221); Msg: b'de219.cloudys.net closing connection'

我不知道这是否重要,但是在包含实际信息而不是占位符的代码中,mail.domain.com 和 from_address 都具有相同的域。

什么可能导致一台计算机出现问题,而其他计算机则不会出现问题?

python email ssl smtp
1个回答
0
投票

通过使用调试记录,我发现导致错误的原因确实是主机名中的下划线,但并不是因为设备名称。它似乎在主机名末尾附加了连接特定的 DNS 后缀(并且该后缀中有一个下划线),我需要对其进行编辑以阻止错误再次发生。 是我用来更改 DNS 后缀的指南。

© www.soinside.com 2019 - 2024. All rights reserved.