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

如何在Amazon Lambda中通过Mailgun API发送带本地临时文件附件的邮件?

解决Lambda调用Mailgun API添加附件的问题

要给Mailgun的邮件请求添加附件,你需要调整requests.post的调用方式——改用files参数传递附件,同时修正临时文件的创建逻辑(原TemporaryFile无法满足邮件附件的读取需求)。以下是完整的修改代码:

def handler(event, context):
    import requests, os, tempfile

    # 创建可重复读取的临时文件(替换原TemporaryFile)
    with tempfile.NamedTemporaryFile(mode='wb+', delete=False, suffix='.txt') as temp:
        temp.write(b'Hello world!')
        # 写入后将文件指针移到开头,确保后续能读取内容
        temp.seek(0)
        temp_filename = temp.name

    # 读取网页内容
    tempurl = event['url']
    myReq = requests.get(tempurl)
    email = event.get('email', 'my.name@gmail.com')
    title = event.get('title', 'emailThis')
    
    # 邮件基础参数
    params = {
        "from": "Excited User <excited-user@example.com>",
        "to": email,
        "subject": title,
        "html": myReq.text
    }

    # 构造附件参数:格式为 (文件名, 文件对象, MIME类型)
    with open(temp_filename, 'rb') as attach_file:
        files = {
            "attachment": ("hello.txt", attach_file, "text/plain")
        }
        # 发送请求:同时传递data和files,requests会自动处理multipart/form-data格式
        response = requests.post(
            os.environ['myUrl'] + '/messages',
            auth=("api", os.environ['myAuth']),
            data=params,
            files=files
        )
    
    # 可选:检查请求状态
    print(f"Mailgun响应状态码: {response.status_code}")
    print(f"响应内容: {response.text}")
    
    return {"status": response.status_code, "message": response.text}

关键说明

  • 临时文件选择:用NamedTemporaryFile替代TemporaryFile,前者支持重新打开(需要读取文件内容作为附件),且可指定后缀名帮助Mailgun识别文件类型。delete=False确保文件在关闭后不会立即删除,Lambda执行完毕会自动清理临时目录。
  • 文件指针重置:写入内容后必须调用seek(0),否则读取文件时会从末尾开始,无法获取有效内容。
  • 请求格式适配:当requests.post同时传入data和files参数时,会自动使用multipart/form-data格式发送请求,这是Mailgun接受附件的要求。
  • 附件参数规范:files字典的键为attachment(Mailgun API指定的参数名),值是包含文件名、打开的文件对象、MIME类型的元组(比如application/pdf对应PDF文件,image/png对应PNG图片)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 18:45:17