Configuré AWS SES
para enviar y recibir correos electrónicos. Verifiqué mi dominio y creé un conjunto de reglas mediante el cual todos los correos electrónicos entrantes ahora se almacenarán en un S3 bucket
con object key prefix as email
. Encontré los siguientes códigos para leer archivos de un depósito S3: http://docs.aws.amazon.com/AmazonS3/latest/dev/RetrievingObjectUsingJava.html
Estoy tratando de leer los correos electrónicos. Mi regla para SES almacena todos los correos electrónicos entrantes en mi depósito s3 especificado. Estoy tratando de agregar el código que lee el cubo, obtener los correos electrónicos. La próxima vez que lea el cubo, ¿cómo puedo entender qué correos electrónicos se leyeron antes y cuáles leer? Entonces, ¿hay alguna manera de que pueda leer el depósito con correos electrónicos y hacer que se lean para no tener que procesarlos nuevamente?
S3 es solo almacenamiento. No tiene sentido de "leído" frente a "no leído", y si está descubriendo mensajes enumerando objetos en el cubo, su mejor solución sería algo como esto:
Después de procesar cada mensaje, muévalo a otro lugar. Este podría ser otro depósito o un prefijo diferente en el mismo depósito.
S3 no tiene una operación de "mover", pero tiene copia y tiene eliminación... entonces, para cada mensaje que procese, modifique la clave del objeto (la ruta + nombre de archivo).
Si sus correos electrónicos se almacenan con un prefijo, como "entrante/" para que un mensaje individual tenga una clave que parezca (p. ej.) "entrante/jozxyqkblahexample", cambie esa cadena a "procesado/jozxyqkblahexample". Luego dígale a S3 que copie del antiguo al nuevo. Cuando eso tenga éxito, dígale a S3 que elimine el original.
Esto (¿principalmente? Resuelve su problema, porque dado que solo enumera objetos con el prefijo "entrante/", entonces no los verá la próxima vez, ahora están fuera del camino.
Pero, hay un problema potencial con esta solución... específicamente, puede entrar en conflicto con el modelo de consistencia S3. S3 no garantiza que obtener una lista de objetos le dará inmediatamente una respuesta que refleje toda su actividad completada recientemente en el depósito... es posible que los objetos permanezcan por un breve tiempo en la lista de objetos después de ser eliminados... . por lo que aún es posible ver un mensaje en la lista después de haberlo eliminado. Las posibilidades son razonablemente bajas, pero debe ser consciente de la posibilidad.
Cuando SES coloca un mensaje en su depósito, también es posible configurarlo para que le notifique que acaba de hacerlo.
Por lo general, una mejor solución que sondear el depósito en busca de correo es que SES le envíe una notificación SNS de que se recibió el mensaje. La notificación incluirá información sobre el mensaje, incluida la clave donde se almacenó en el depósito. Luego obtiene exactamente ese mensaje del depósito y lo procesa, por lo que no se necesita una lista de objetos del depósito.
Tenga en cuenta que SES tiene dos tipos de notificación diferentes: para correos electrónicos pequeños, SES puede incluir el correo en la notificación de SNS, pero ese no es el tipo de notificación mencionado anteriormente. Arriba, le sugiero que investigue la posibilidad de usar una notificación de alerta , enviada por SES a través de SNS para informarle sobre cada correo electrónico a medida que se envía a S3.