You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python发送邮件时加入public_ip后异常的问题排查

问题分析与解决方案

你的代码核心问题是邮件消息格式不符合SMTP协议要求:smtplib的sendmail方法要求msg参数必须包含标准邮件头(如From、To、Subject),之后空一行再写正文内容。之前未加入public_ip时,邮件服务器可能宽松处理了非法格式,但加入后触发了格式校验,导致邮件发送失败。

另外还有两个小问题需要修正:

  • os.getenv('os')无法获取系统信息,这个环境变量不存在,建议改用platform.platform()来获取完整系统版本,或者os.name获取系统类型。
  • 代码中调用了get_internal_ip()但未给出定义,需确保该函数已正确实现(如果未实现,可参考补充示例)。

修正后的代码

def send_email():
    import os
    import smtplib, ssl
    import requests
    import platform  # 新增导入获取系统信息

    # 实现内部IP获取函数(如果之前未定义)
    def get_internal_ip():
        import socket
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect(("8.8.8.8", 80))
            internal_ip = s.getsockname()[0]
            s.close()
            return internal_ip
        except:
            return "无法获取内部IP"

    login = os.getlogin()
    sys_info = platform.platform()  # 替换os.getenv('os')
    ip = get_internal_ip()
    public_ip = requests.get('http://icanhazip.com').text.strip()  # strip()默认会去掉换行和空白

    port = 465  # For SSL
    email = input('Type your email and press enter: ')
    password = input("Type your password and press enter: ")

    # 构造符合SMTP标准的邮件内容
    subject = "系统信息报告"
    body = f'{login} | {sys_info} | {ip} | {public_ip}'
    # 邮件头+正文,注意空行分隔
    msg = f"From: {email}\nTo: {email}\nSubject: {subject}\n\n{body}"

    # Create a secure SSL context
    context = ssl.create_default_context()

    with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
        server.login(email, password)
        server.sendmail(from_addr=email, to_addrs=email, msg=msg)

send_email()

关键说明

  1. 邮件格式修正:新增了From、To、Subject头信息,并用空行分隔头和正文,完全符合SMTP协议要求,无论是否包含public_ip都能正常发送。
  2. 系统信息获取:改用platform.platform()能正确获取如Windows-10-10.0.19045-SP0或Linux-5.15.0-78-generic-x86_64-with-glibc2.35这类完整系统信息。
  3. public_ip处理:strip()默认会去除所有首尾空白字符(包括换行),比strip('\n')更稳妥。

内容的提问来源于stack exchange,提问作者Arcade Luke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:52:54