使用boto3 SESv2模板邮件发送fpdf2生成PDF为空问题
解决SESv2模板邮件PDF附件内容为空的问题
问题原因
你遇到的PDF附件页数正确但内容为空的问题,核心原因是fpdf2的output()调用方式不正确,导致传递给SESv2的PDF字节流实际是空的。本地保存PDF正常是因为你使用了带文件名的output('filename.pdf'),而获取字节流时的调用没有触发正确的内容生成逻辑。
修复步骤
1. 修正PDF字节流获取代码
在fpdf2中,要正确获取PDF的字节内容,需要显式指定dest='S'参数(表示返回字符串内容),再编码为bytes:
pdf_file = fpdf.FPDF(orientation="P", unit="mm", format="A4") pdf_file.add_page() pdf_file.set_auto_page_break(auto=True, margin=15) # ... 生成PDF内容的代码 # 正确获取PDF字节流 file_content = pdf_file.output(dest='S').encode('latin-1')
注:如果使用fpdf2 2.5.0及以上版本,直接调用
pdf_file.output()即可返回bytes,但显式指定dest='S'能兼容更多版本。
2. 验证字节流有效性
在将字节流传递给邮件发送函数前,可先保存到本地验证内容:
with open('verify.pdf', 'wb') as f: f.write(file_content)
打开verify.pdf确认内容正常后,再传入邮件附件。
3. 确认邮件附件参数正确性
你的邮件发送代码中,AttachmentDict的参数基本符合要求,ContentId是可选字段,无需强制设置,不影响附件内容展示。
内容的提问来源于stack exchange,提问作者ubqm
相关产品推荐
相关产品推荐

