SMTP发送邮件时无法展示完整正文与主题的问题咨询
问题根因
- SMTP的
sendmail方法第三个参数需要传入完整的标准邮件原始报文,而非仅正文内容。标准邮件需要包含Subject(主题)、From(发件人)、To(收件人)等头字段,头字段和正文之间需要用两个连续换行分隔,否则服务端无法识别主题,还会丢弃不符合格式的内容。 - 你的多行字符串拼接存在语法问题:Python中相邻的字符串字面量会自动合并,
"Hey"和下一行的"For game ID..."之间没有空格或换行,会直接拼接为HeyFor...,导致开头内容异常。
修正方案
方案1:直接构造符合规范的原始邮件报文
sent_subject = "Warning" # 修正字符串拼接的间隙问题,同时拼接邮件头+正文 sent_msg = ( f"From: {sender_add}\n" f"To: {receiver_add}\n" f"Subject: {sent_subject}\n" "\n" # 头和正文的分隔必须保留两个换行 "Hey\n" f"For game ID: {game_id} and game Name: {game_name} \n\n you are going to die in {secs}sec" "\n\n" "Warning,\n" "Chixcy\n" ) smtp_server.sendmail(sender_add, receiver_add, sent_msg)
方案2(更推荐):使用Python标准库email构造邮件,避免格式错误
适合后续扩展附件、HTML内容、编码适配的场景:
from email.message import EmailMessage # 构造邮件对象 msg = EmailMessage() msg['From'] = sender_add msg['To'] = receiver_add msg['Subject'] = "Warning" # 设置正文 msg.set_content( f"Hey\n" f"For game ID: {game_id} and game Name: {game_name} \n\n you are going to die in {secs}sec" "\n\n" "Warning,\n" "Chixcy\n" ) # 发送时直接传序列化后的邮件内容 smtp_server.send_message(msg)
内容的提问来源于stack exchange,提问作者chixcy
相关产品推荐
相关产品推荐

