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
相关产品推荐
相关产品推荐

