我正在制作一个程序,该程序应该定期向我发送电子邮件,以便我可以对工作设备进行定期状态检查。我需要使用该程序的计算机在行
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.login(from_address, password)
server.send_message(msg)
我不知道这是否重要,但是在代码中实际信息而不是占位符,mail.domain.com 和 from_address 都具有相同的域。
什么可能会在一台计算机上引起问题,但不会在其他计算机上引起问题?
错误“SMPTHeloError: (501, b'Syntactically invalid HELO argument(s)')”通常在邮件服务器收到的 HELO 或 EHLO 命令(你的脚本用于标识自身的命令)格式不正确时出现。虽然你确认了主机名没问题,但问题可能出在 你代码中未包含的、用于生成 HELO/EHLO 的主机名/域名的方式 上。
以下是可能在一台机器上出现问题但在另一台机器上不出现的原因:
-
动态 IP 地址/DHCP: 你的设备可能正在使用动态 IP 地址,每次连接到互联网时都会发生变化。某些 ISP 会将这些动态 IP 地址与“主机名”关联,这些“主机名”在 HELO/EHLO 声明中不符合语法规则(例如,包含下划线等无效字符)。
-
本地网络配置: 问题设备上的本地网络配置(主机名、DNS 设置)可能会影响 Python 确定和使用发送 HELO/EHLO 命令的主机名的方式。
以下是进行故障排除的方法:
1. 明确指定 HELO/EHLO 字符串:
-
使用
server.ehlo_or_helo_if_needed(name='your_hostname_or_domain')
方法明确设置 HELO/EHLO 字符串。使用你知道对你的邮件服务器有效的主机名或域名替换“your_hostname_or_domain”。
python
context = ssl.create_default_context()
with smtplib.SMTP_SSL("mail.domain.com", 465, context=context) as server:
server.ehlo_or_helo_if_needed(name='mail.domain.com') # 使用你的域名
server.login(from_address, password)
server.send_message(msg)
2. 检查网络配置:
- 主机名: 确保问题设备上的主机名符合标准命名约定(无下划线、特殊字符)。
- DNS: 验证问题设备是否可以使用正确的 DNS 服务器解析主机名和域名。
3. 检查邮件服务器日志:
- 你的邮件服务器日志可以提供有关发送到它的无效 HELO/EHLO 命令的更多详细信息。检查日志以获取有关语法问题的线索。
通过明确设置 HELO/EHLO 字符串并仔细检查网络配置,你应该能够解决这个问题。
标签:python,email,ssl,smtp From: 78842202