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

Python邮件脚本问题:发送邮件仅显示主题无正文

邮件发送成功但无正文的排查与解决方法

我来帮你一步步排查这个问题,咱们从代码里的几个关键环节入手:

1. 先确认datum变量是否匹配文件名

在logger.py的mail函数里,你用datum拼接了要读取的文件名:

note = open("logs/IguanaResult" + datum + ".txt", "r", encoding="utf-8")

但这里有个核心问题:datum变量在哪里定义的?
如果它和你在文件A中写入.txt文件时用的日期格式不匹配,甚至根本没定义,会导致两种情况:

  • 读取了一个不存在的文件(但你说没报错,大概率不是这个情况)
  • 读取了一个空文件,最终message为空,邮件自然没有正文

解决建议:

  • 确保datum和文件A中写入时用的日期变量完全一致,格式也要一模一样(比如都是%d-%m-%Y)。
  • 在logger.py里加个打印,确认实际读取的文件名:
    target_file = f"logs/IguanaResult{datum}.txt"
    print(f"准备读取文件:{target_file}")
    note = open(target_file, "r", encoding="utf-8")
    
    然后去对应路径查看这个文件,看看里面有没有测试结果内容。

2. 检查测试结果文件是否正确写入

你提到在文件A中执行代码写入文本,但可能存在写入失败的情况:

  • 写入时的路径和logger.py读取的路径不一致(比如文件A里直接写了IguanaResult{date}.txt,没放在logs/目录下)
  • 写入后没有关闭文件或刷新缓冲区(比如用open写入后没调用.close(),导致内容还在内存里,没写到磁盘上)

解决建议:

  • 核对文件A里的写入代码,确保文件名、路径和logger.py读取的完全一致。
  • 尽量用with语句进行文件写入,它会自动帮你关闭文件,避免缓冲区问题:
    from datetime import date
    current_date = date.today().strftime("%d-%m-%Y")
    with open(f"logs/IguanaResult{current_date}.txt", "w", encoding="utf-8") as f:
        f.write("你的测试结果内容")
    

3. 排查mailing.py里的细节问题

虽然你说邮件发送成功,但有几个小细节可以确认:

  • 你在mailing.py里用了date.today(),有没有导入datetime模块?如果没加from datetime import date,这里应该会报错,但你说没报错,大概率已经导入了,还是确认一下更稳妥。
  • password = h.readline()会读取到换行符\n,可能导致后续登录问题,虽然这次没影响,但最好处理一下:
    password = h.readline().strip('\n')
    
  • 看一下mailing.py里print("content:" + message)的输出,如果content:后面是空的,说明从logger.py传过来的message本身就是空的,问题出在前面的读取环节。

4. 快速调试技巧

  • 在logger.py读取文件后,直接打印读取到的内容:
    message = note.read()
    print(f"读取到的邮件内容:{message}")
    
    如果这个输出是空的,那就是文件读取的问题;如果有内容,再排查邮件发送环节(这种概率很低)。
  • 手动打开目标.txt文件,直接查看里面有没有内容,这是最直接的验证方式。

内容的提问来源于stack exchange,提问作者Miladin Jeremic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 06:57:56