如何为每个Cognito用户生成已验证域名下的唯一SES邮箱地址?
实现用户专属AWS SES邮箱接收附件并处理的方案
一、为每个用户生成专属SES邮箱的实现方案
完全可以通过AWS SES结合其他AWS服务实现你的需求,具体步骤如下:
- 前提准备:确保你已经完成SES域名(
example.com)的验证,验证完成后,SES允许接收该域名下任意子邮箱地址的邮件,无需单独验证每个用户的专属邮箱。 - 配置SES收件规则:创建一个SES收件规则集,设置规则将发送到
@example.com域名下所有地址的邮件路由到指定S3存储桶,同时触发Lambda函数。规则可设置为匹配所有收件地址(*@example.com),确保所有用户的专属邮箱邮件都能被捕获。 - 用户注册时生成专属邮箱:用户注册流程中,生成唯一字符串(比如UUID、随机哈希串)作为邮箱前缀,组合成
{唯一串}@example.com,将这个邮箱地址与用户ID关联存入数据库(如DynamoDB、RDS)。 - Lambda处理流程:当邮件存入S3后,Lambda被触发,执行以下操作:
- 从S3读取邮件原始内容,解析收件邮箱地址;
- 通过数据库查询找到该邮箱对应的用户;
- 提取邮件中的附件,将其存入业务专用的S3路径(可按用户ID分类存储);
- 处理完成后,删除S3中的原始邮件文件,或标记为已处理状态。
二、单个邮箱接收所有附件时的用户识别方案
如果选择用单个邮箱(比如attachments@example.com)接收所有用户的附件,可通过以下几种方式识别对应的用户:
- 邮件主题/正文嵌入用户标识:要求用户在发送邮件时,在主题或正文中明确标注自己的用户ID、用户名等唯一标识。Lambda处理邮件时,解析主题或正文内容提取该标识,再关联到对应用户。
- 利用SES加号别名特性:使用
attachments+{用户ID}@example.com格式的邮箱地址,SES会自动忽略加号后的内容,将邮件投递到attachments@example.com。Lambda处理时,从收件邮箱地址中提取加号后的用户ID即可关联用户。 - 自定义邮件头字段:让用户在发送邮件时添加自定义邮件头(如
X-User-ID: 12345),Lambda解析邮件原始内容时读取该自定义头,获取用户标识。
注意事项
- 确保S3存储桶、Lambda函数具备相应权限:Lambda需要有读取S3邮件文件、写入业务S3路径、访问数据库的权限;SES需要有写入目标S3桶的权限。
- 注意SES的收件配额,避免超出限制影响邮件接收。
- 处理邮件后及时清理原始邮件文件,避免占用不必要的S3存储资源。
内容的提问来源于stack exchange,提问作者Dylan w
相关产品推荐
相关产品推荐

