Geo*_*mas 2 amazon-s3 amazon-web-services amazon-ses
我已经配置了AWS SES发送和接收电子邮件,我已经验证了我的域并创建了规则集,所有传入的电子邮件现在都将存储在S3 bucketwith object key prefix as email. 我发现以下代码用于从 S3 存储桶读取文件:
http://docs.aws.amazon.com/AmazonS3/latest/dev/RetreeringObjectUsingJava.html
我正在尝试阅读电子邮件。我的 SES 规则将所有传入电子邮件存储到我指定的 s3 存储桶中。我正在尝试添加读取存储桶、获取电子邮件的代码。下次当我读取该存储桶时,我如何才能了解之前读取了哪些电子邮件以及要读取哪些电子邮件。那么有什么方法可以让我读取带有电子邮件的存储桶,并将它们设置为已读,这样我就不必再次处理它们
S3只是存储。它没有“已读”与“未读”之分,如果您通过列出存储桶中的对象来发现消息,那么最好的解决方案将是这样的:
处理完每条消息后,将其移至其他地方。这可能是另一个存储桶,也可能是同一存储桶中的不同前缀。
S3 没有“移动”操作,但它有复制,也有删除……因此,对于您处理的每条消息,修改对象键(路径+文件名)。
如果您的电子邮件使用前缀存储,例如“incoming/”,以便单个邮件的键看起来像“incoming/jozxyqkblahexample”,请将该字符串更改为“processed/jozxyqkblahexample”。然后告诉S3从旧的复制到新的。成功后,告诉 S3 删除原始文件。
这(大部分?解决了你的问题,因为由于你只列出带有前缀“incoming/”的对象,那么你下次就不会看到它们了——它们现在已经不碍事了。
但是,此解决方案存在一个潜在问题……具体来说,您可能会与 S3 一致性模型发生冲突。S3 不保证获取对象列表会立即向您提供反映您最近完成的针对存储桶的所有活动的响应...对象在被删除后可能会在对象列表中停留一小段时间。 .因此,在您删除列表后,仍然可以在列表中看到一条消息。可能性相当低,但您需要意识到这种可能性。
当 SES 将消息放入您的存储桶时,还可以将其配置为通知您它刚刚执行了此操作。
通常,比轮询存储桶中的邮件更好的解决方案是 SES 向您发送已收到消息的SNS 通知。该通知将包含有关消息的信息,包括存储在存储桶中的密钥。然后,您从存储桶中准确获取该消息并对其进行处理,因此不需要存储桶对象列表。
请注意,SES 有两种不同的通知类型 - 对于小型电子邮件,SES 实际上可以将邮件包含在 SNS 通知中,但这不是上面提到的通知类型。上面,我建议您研究使用警报通知的可能性,该通知由 SES 通过 SNS 发送,告诉您每封电子邮件被放入 S3 时的情况。
| 归档时间: |
|
| 查看次数: |
4097 次 |
| 最近记录: |