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

Python SMTP邮件内容不显示及Lambda超时异常求助

邮件正文不显示及Lambda超时问题解决

核心问题:邮件正文无法显示

你的代码里邮件头和正文之间缺少必要的空行,SMTP协议要求邮件头信息结束后必须跟两个连续的换行符(\n\n),才能将后续内容识别为正文。当前代码中header末尾只加了一个\n,导致正文被当成了邮件头的一部分,所以收件端无法正确解析显示正文。

附加问题:Lambda超时

发送邮件后没有主动关闭SMTP连接,Lambda进程会一直等待连接释放,最终触发超时。需要在发送完成后调用mail.quit()关闭连接。

修改后的代码

import smtplib

# 注意:sender必须是完整的邮箱地址,比如 'your-account@example.org'
sender = 'your-account@example.org'
recipient = contact  # 确保contact是有效的收件邮箱字符串

try:
    subject = f"{instance_name} Issues"  # 使用f-string更简洁
    content = "Hello World" 
    mail = smtplib.SMTP('smtp.office365.com', 587)
    mail.ehlo()
    mail.starttls()
    # login的邮箱要和sender一致,密码建议用应用专用密码(如果开启了MFA)
    mail.login('your-account@example.org', 'your-app-password')
    
    # 关键改动:header末尾添加两个\n,分隔头和正文;Subject首字母大写符合标准
    header = f"To: {recipient}\nFrom: {sender}\nSubject: {subject}\n\n"
    message = header + content
    
    mail.sendmail(sender, recipient, message)
    mail.quit()  # 关闭SMTP连接,避免Lambda超时

except Exception as e:
    # 捕获具体异常便于调试,不要用裸except
    print(f"Error: unable to send email - {str(e)}")

关键改动说明

  • 邮件格式修正:将header末尾的\n改为\n\n,确保头和正文之间有明确的分隔
  • 关闭SMTP连接:添加mail.quit()主动终止连接,让Lambda进程正常结束
  • 代码优化:用f-string替代字符串拼接,更易读;捕获具体异常方便排查问题
  • 规范细节:Subject首字母大写,符合邮件协议的常规写法;确保sender是完整邮箱地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:27:49