【问题标题】:Parsing Raw Emails from Amazon SES in Java在 Java 中解析来自 Amazon SES 的原始电子邮件
【发布时间】:2017-06-21 09:01:57
【问题描述】:
这是我面临的问题:
- 我从 Amazon SES 接收到 S3 存储桶的原始电子邮件,触发了 Lambda 函数。
-
该函数使用以下方法从存储桶中读取数据(原始电子邮件):
S3Object s3Object = s3Client.getObject(new GetObjectRequest(srcBucket, srcKey));
-
然后将原始电子邮件转换为 InputStream 并创建 Java Mail (javax.mail) MimeMessage 对象:
MimeMessage mimeMessageObj = new MimeMessage(newSession, inputStreamObj);
问题是:
你如何解析出邮件中的所有信息(包括附件)。
MimeMessage 似乎有专门的方法(getSubject 等),但它们返回空值。在填充这些字段之前是否需要进行特殊解析?我发现了很多直接使用这些特殊方法创建电子邮件的示例,但是逆向读取原始电子邮件提要的过程似乎无法正常工作。手动解析是唯一的选择吗?我认为这将非常乏味且容易出错。
【问题讨论】:
标签:
java
email
amazon-web-services
jakarta-mail
【解决方案1】:
如果您收到空值,则该消息不是真正的 MIME 格式消息。确保它是,并且消息的开头没有空行。
【解决方案2】:
您可以尝试使用org.apache.commons.mail.util 包中的MimeMessageParser。
您的代码应如下所示:
MimeMessage mimeMessageObj = new MimeMessage(newSession, inputStreamObj);
MimeMessageParser mimeParser = new MimeMessageParser(mimeMessageObj);
try {
mimeParser.parse();
List<javax.mail.Address> to = mimeParser.getTo();
String from = mimeParser.getFrom();
String subject = mimeParser.getSubject();
String bodyPlain = mimeParser.getPlainContent();
String bodyHtml = mimeParser.getHtmlContent();
long timestamp = mime.getSentDate().getTime();
} catch (Exception e) {
System.out.println("Something went wrong");
e.printStackTrace();
}
这是您需要的 maven 依赖项:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.3</version>
</dependency>