在SES

时间:2017-03-18 01:59:09

标签: amazon-web-services amazon-s3 amazon-ses

我已配置AWS SES用于发送和接收我已验证我的域名的电子邮件,并创建了规则集,现在所有收到的电子邮件都将存储在S3 bucket object key prefix as email中。我找到了以下用于从S3存储桶读取文件的代码: http://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingJava.html

我正在尝试阅读电子邮件。我的SES规则将所有传入的电子邮件存储到我指定的s3存储桶中。我正在尝试添加读取存储桶的代码,获取电子邮件。下次当我读取存储桶时,如何理解之前读取的电子邮件和要读取的电子邮件。那么有什么办法可以用电子邮件读取存储桶并将它们视为已读取,这样我就不必再处理它们了

1 个答案:

答案 0 :(得分:2)

S3只是存储。它没有“读取”与“未读”的感觉,如果您通过在桶中列出对象来发现消息,那么最佳解决方案将是这样的:

处理完每封邮件后,将其移至其他位置。这可能是另一个存储桶,或同一存储桶中的不同前缀。

S3没有“移动”操作,但它确实有复制并且确实有删除...因此,对于您处理的每条消息,修改对象键(路径+文件名)。

如果您的电子邮件存储时带有前缀,例如“incoming /”,以便单个邮件的密钥看起来像(例如)“incoming / jozxyqkblahexample”,则将该字符串更改为“processed / jozxyqkblahexample”。然后告诉S3从旧复制到新复制。如果成功,请告诉S3删除原始文件。

这(主要是?)解决了你的问题,因为你只列出前缀为“incoming /”的对象,那么下次你就不会看到它们了 - 它们现在已经不在了。

但是,这个解决方案存在一个潜在的问题......具体来说,您可能会遇到S3一致性模型。 S3并不保证提取对象列表会立即为您提供反映所有最近完成的针对存储桶的活动的响应...对象可能会短暂停留在删除后的对象列表...所以在您删除它之后仍然可以在列表中看到一条消息。机会相当低,但你需要意识到这种可能性。

当SES将消息丢入您的存储桶时,也可以将其配置为通知您它刚刚执行该操作。

通常,比轮询存储桶更好的解决方案是SES到send you an SNS notification收到消息。通知将包含有关消息的信息,包括存储在存储桶中的密钥。然后,您从存储桶中准确地获取该消息并对其进行处理,因此不需要存储桶对象列表。

请注意,SES有两种不同的通知类型 - 对于小型电子邮件,SES实际上可以在SNS通知中包含邮件,但不是上面提到的通知类型。以上,我建议您调查使用alert notification的可能性,由SES通过SNS发送,告诉您有关每封电子邮件被放入S3的信息。