Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
Amazon SES leyendo correos electrónicos almacenados en un depósito s3 usando java del objeto S3ObjectInputStream

Configuré mi AWS SES para almacenar todos los correos electrónicos entrantes en un depósito S3 con Prefijo de clave de objeto como correo electrónico. Tengo una aplicación Java que estoy tratando de leer todos los objetos en ese depósito y luego moverlos a otro para que solo los correos electrónicos no leídos permanezcan en el depósito. Yo uso el siguiente código:

 public class FileReadImpl { private static final Logger logger = LoggerFactory.getLogger(FileReadImpl.class); AmazonS3 s3; public void init(String accessKey, String secretKey) { s3 = new AmazonS3Client(new BasicAWSCredentials(accessKey, secretKey)); } public List<S3ObjectInputStream> readEmailsAndMoveToRead(String accessKeyId, String secretAccessKey, String incommingBucket, String processedBucket) { List<S3ObjectInputStream> s3ObjectInputStreamList = new ArrayList<S3ObjectInputStream>(); AWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey); AmazonS3 s3 = new AmazonS3Client(credentials); ObjectListing listing = s3.listObjects(incommingBucket, "Email/"); List<S3ObjectSummary> summaries = listing.getObjectSummaries(); while (listing.isTruncated()) { listing = s3.listNextBatchOfObjects (listing); summaries.addAll (listing.getObjectSummaries()); } for (S3ObjectSummary s3ObjectSummary : summaries) { String key = s3ObjectSummary.getKey();//getting the key of the item S3Object object = s3.getObject( new GetObjectRequest(incommingBucket, key)); S3ObjectInputStream inuptStream = object.getObjectContent(); s3ObjectInputStreamList.add(inuptStream); if(!s3.doesBucketExist(processedBucket)) { s3.createBucket(processedBucket); } s3.copyObject(incommingBucket, key, processedBucket, key); s3.deleteObject(incommingBucket, key); try { inuptStream.close(); } catch (IOException e) { logger.error(e.toString()); } } return s3ObjectInputStreamList; } }

Tengo otra clase de servicio que accede a la clase anterior para obtener la lista de correos electrónicos y almacenarlos en mi base de datos. El código es como se muestra a continuación:

 public void getEmails() { FileReadImpl fileReadImpl = new FileReadImpl(); List<S3ObjectInputStream> s3ObjectInputStreamList = fileReadImpl.readEmailsAndMoveToRead("accessKeyId", "secretAccessKey", "incomingBucket", "processedBucket"); for (S3ObjectInputStream s3ObjectInputStream : s3ObjectInputStreamList) { //logic to save the email content as emails } }

No estoy seguro de cómo obtener el contenido del correo electrónico, los detalles de los remitentes, los detalles de cc, etc. del objeto S3ObjectInputStream que tengo. ¿Cómo proceso este objeto para obtener todos los detalles que necesito?

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe convertir el flujo de entrada en un mensaje MIME, lo que se puede hacer de la siguiente manera:

 for (S3ObjectSummary s3ObjectSummary : summaries) { String key = s3ObjectSummary.getKey();//getting the key of the item S3Object object = s3.getObject( new GetObjectRequest(incommingBucket, key)); InputStream mailFileInputStream = object.getObjectContent(); String bucketKey = object.getKey(); MimeMessage message = getMimeMessageForRawEmailString(mailFileInputStream);//converting input stream to mime message object.close(); } public MimeMessage getMimeMessageForRawEmailString(InputStream mailFileInputStream) throws Exception { Properties props = new Properties(); Session session = Session.getDefaultInstance(props, null); MimeMessage message = new MimeMessage(session, mailFileInputStream); return message; }

Una vez que tenga el mensaje Mime, use un analizador para leer el contenido de ese mensaje:

 MimeMessageParser parser = new MimeMessageParser(message); String from = parser.getFrom(); String htmlContent = parser.parse().getHtmlContent(); System.out.println("Body: "+htmlContent); String plain = parser.parse().getPlainContent(); System.out.println("plain: "+plain);

De esta manera, podrá leer todo el contenido del correo electrónico almacenado como un objeto S3 en un depósito S3

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda