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

