- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个现有代码可以正确下载和处理一些电子邮件。
要处理的电子邮件必须有一个或多个 xml 作为附件,现在我正在迁移这个过程从当前的标准邮件帐户到一个认证系统,该系统将邮件包装到一个新的电子邮件。
因此,我必须解析一封带有 XML(经过认证)和 EML(我应该处理的消息)的电子邮件,而不是带有一个 xml 附件的平面电子邮件。
简而言之,我的代码如下:
private void processMessage(final Message message) {
try {
final String contentType = message.getContentType();
if (contentType.contains("multipart")) {
final Multipart multiPart = (Multipart) message.getContent();
for (int i = 0; i < multiPart.getCount(); i++) {
final MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(i);
/**************************************************************
* HERE I CAN'T GET THE EML (and its attachments) FROM 'part' *
**************************************************************/
if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
processAttachment(part);
}
}
}
} [...cutted...]
}
private void processAttachment(final MimeBodyPart part) throws IOException, MessagingException {
final InputStream input = getReusableInputStream(part);
if (part.getFileName() != null && isXmlType(part.getContentType())) {
processXml(input);
}
}
我应该修改它,以便解析 EML 并递归地获取附件,但我错过了全局。
更新:我已经修改了processAttachment
方法(但它仍然不起作用):
private void processAttachment(final Multipart multipart) {
try {
for (int i = 0; i < multipart.getCount(); i++) {
final BodyPart bodyPart = multipart.getBodyPart(i);
if (bodyPart.getContent() instanceof Multipart) {
// part-within-a-part, do some recursion...
extractAttachment((Multipart) bodyPart.getContent());
}
System.out.println("Filename: " + bodyPart.getFileName());
System.out.println("ct: " + bodyPart.getContentType());
final boolean isXml = bodyPart.getFileName() != null && isXmlType(bodyPart.getContentType());
if (isXml) {
final InputStream inputStream = getReusableInputStream(bodyPart);
processXMLAttachment(inputStream);
}
}
} [cutted]
}
输出是:
Filename: null
ct: TEXT/PLAIN; charset=iso-8859-1
Filename: null
ct: TEXT/HTML; charset=iso-8859-1
Filename: daticert.xml
ct: APPLICATION/XML; name=daticert.xml
Filename: postacert.eml
ct: MESSAGE/RFC822; name=postacert.eml
Filename: smime.p7s
ct: APPLICATION/X-PKCS7-SIGNATURE; name=smime.p7s
从输出中,我可以看到系统只扫描了第一级附件 daticert.xml
和 postacert.eml
但没有找到嵌套附件。
更具体地说,我必须阅读以下内容:
Filename: postacert.eml
ct: MESSAGE/RFC822; name=postacert.eml
有什么帮助吗?
谢谢
最佳答案
好吧,我通过检查任何 MimePart
的类来解决,我发现嵌套消息是 IMAPNestedMessage
的类型,所以在这种对象上我递归调用主要方法processMessage
:
private void processAttachment(final Multipart multipart) {
try {
for (int i = 0; i < multipart.getCount(); i++) {
final BodyPart bodyPart = multipart.getBodyPart(i);
// BEGIN - Added this part
System.out.println("CLASS bodyPart: " + bodyPart.getContent().getClass());
if (bodyPart.getContent() instanceof IMAPNestedMessage) {
processMessage((IMAPNestedMessage) bodyPart.getContent());
} else {
// END - Added this part
if (bodyPart.getContent() instanceof Multipart) {
processAttachment((Multipart) bodyPart.getContent());
} else {
final boolean isXml = bodyPart.getFileName() != null && isXmlType(bodyPart.getContentType());
if (isXml) {
final InputStream inputStream = getReusableInputStream(bodyPart);
processXMLAttachment(inputStream);
}
}
}
}
} catch (final Exception e) {
sendMailService.sendMailForImportINPSFailed("metodo processAttachment()", e);
e.printStackTrace();
}
}
现在它工作正常。
关于javax.mail : Get nested attachments in EML attachment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51405004/
我希望有人能给我一些关于在 r 中导入和解析 .eml 文件的建议。我有一个包含大约 1000 个 .eml 文件的文件夹,其中包含如下条目的文本: 返回路径: 我想做的是将所有这些文件导入到 r 中
我正在使用 javax mail api 发送电子邮件。 当电子邮件正文由 eml 文件给出时,如何发送电子邮件? 我还需要添加本地磁盘上的这封电子邮件的附件。 如何从 eml 文件发送电子邮件的示例
我需要使用 Linux 终端将我的邮件以“*eml”格式从本地文件夹上传到 gmail 帐户。例如一些电子邮件:myemail.eml 文件 最佳答案 试试 mail 或 mailx 命令。 mail
我想创建包含多个附件的.eml 格式的电子邮件文件。附件已生成且附件内容正确。但附件始终以 .dat 格式出现,文件名为“ATT00001”、“ATT0002”等 目前我正在遵循 this stack
我有一个 .eml 文件。我想要做的是从此 .eml 文件中检索发件人、收件人、主题、正文和附件(如果有)并保存到数据库。我需要在没有任何第三方应用程序的情况下在 C# 中执行此操作。 我搜索了一些源
我正在创建 eml,并使用 here 中提到的过程将它们保存到目录中.我想知道如何发送这些 eml 文件?我尝试使用 SMTPClient 类的对象,但它使用 MailMessage 对象作为其参数,
基本上,我正在尝试使用 EML 文件,我想知道这些文件在不同的电子邮件服务器上是否非常标准......基本上,EML 文件是否有 RFC,就像电子邮件地址和其他主题的 RFC 一样? 我想我可以更具体
我需要使用 Mailkit 从 IMAP 导出 EML 文件,但是没有导出电子邮件的方法。 我在 MimeKit - Mailkit Documentation 中也没有找到任何文档. 是否可以使用
我正在尝试创建一个带有电子邮件接收触发器的逻辑应用。 当电子邮件有多个附件时,我可以循环并对每个附件进行 http 调用 但是,我们必须通过创建带有附件的电子邮件的 .eml 文件,将整个电子邮件作为
我想阅读 Gmail 中的新邮件并将其保存在 Dropbox 中。我已经完成了获取用户邮件并将其保存在保管箱中的代码。但当消息对象从 Gmail API 返回时,它是一个 JSON,目前我将其保存为
我使用以下代码将 .eml 文件从一个目录移动到另一个目录: if(Files.exists(Paths.get(newDirectoryPath))){ try {
我们有一个网络应用程序,允许用户在表格中查看电子邮件并双击它们以在 Outlook 中打开它们。 为此,我们使用(简化的)代码段: var email = Session.OpenSharedIte
我的目标是向服务器发送请求,并通过响应(以 EML 格式)打开 Outlook 和 Thunderbird,用户可以从中编辑电子邮件文本并将其发送出去。 我正在使用 Java servlet 生成具有
我正在尝试从 PHP 生成 EML 文件。是否有任何库可以让我轻松创建它们?我可以在 Internet 上找到一些 ActiveX 组件,但宁愿使用更便携的东西。 最佳答案 我最终使用这种模板自己构建
我每天收到来自 Google Apps 脚本的多个定时器的电子邮件。 邮件主题: 您的脚本 Eml 管理器最近未能成功完成。失败的摘要如下所示。要为此脚本配置触发器,或更改接收 future 失败通知
我需要能够在基于 Angular/.Net 核心 api 构建的 Web 应用程序中预览 EML 文件。我找到了一项服务 here由仅预览 Word、Excel 或 PowerPoint 文档的 Mi
我正在使用 Microsoft Graph 来获取邮件,我最近注意到当一封电子邮件有一个 .eml 附件时,有两种情况: 如果发件人通过欺骗电子邮件将电子邮件附加到 Composer ,则附件将是项目
我使用 ImapX 库将电子邮件保存到 .eml 文件。我可以使用什么 MIME 来阅读它? MIME 可以读取大部分 Content-Type。 最佳答案 尝试使用:“message/rfc822
我正在使用 python 3.7 和电子邮件,imap 库读取电子邮件并提取电子邮件和附件的内容,所有附件(如 excel、csv、pdf)都作为附件下载,但是当我在电子邮件中收到任何 .eml 文件
上下文 我正在开发 .eml 文件的预览器,但在显示 html 正文中的图像时遇到一些问题。 实际解决方案 我能够获取 html 正文,如下所示: MimeMessage mimeMessage =
我是一名优秀的程序员,十分优秀!