我试图通过javamail和imap从我的电子邮件下载所有新的电子邮件附件。这一切都很好,但有些附件在PDF中被解码为BASE64,这是我的声明
if (msg.getContent() instanceof Multipart)
如何获取此附件并将其下载到硬盘?
到目前为止已经尝试过了,第一个IF语句使用Base64解码捕获附件。
for (Message msg : messages) {
Address[] fromAddress = msg.getFrom();
String from = fromAddress[0].toString();
String subject = msg.getSubject();
String sentDate = msg.getSentDate().toString();
String messageContent = "";
String attachFiles = "";
System.out.println(msg.getContent());
if (msg.getContent() instanceof BASE64DecoderStream)
{
BASE64DecoderStream base64DecoderStream = (BASE64DecoderStream) msg.getContent();
byte[] byteArray = IOUtils.toByteArray(base64DecoderStream);
}
if (msg.getContent() instanceof Multipart) {
Multipart multipart = (Multipart) msg.getContent();
for (int i = 0; i < multipart.getCount(); i++) {
Part part = multipart.getBodyPart(i);
String disposition = part.getDisposition();
if ((disposition != null) &&
((disposition.equalsIgnoreCase(Part.ATTACHMENT) ||
(disposition.equalsIgnoreCase(Part.INLINE))))) {
MimeBodyPart mimeBodyPart = (MimeBodyPart) part;
String fileName = mimeBodyPart.getFileName();
attachFiles += fileName;
File fileToSave = new File(fileName);
mimeBodyPart.saveFile(saveDirectory + File.separator + fileToSave);
System.out.println("saved attachment: " + fileName + " to disk at: " + saveDirectory);
}
}
}
System.out.println("\t From: " + from);
System.out.println("\t Subject: " + subject);
System.out.println("\t Sent Date: " + sentDate);
System.out.println("\t Attachments: " + attachFiles);
System.out.println("");
}
}
如果有一种简单易行的方法可以将附件下载到我的磁盘,也可以使用NodeJS。尝试过node-imap,但我在那里遇到了同样的错误。
您不需要将base64作为特例处理。您已经使用的saveFile方法将对内容进行解码并保存。只需删除您的第一个“如果”语句。
您不想使用instanceof来检查多部分,因为如果它不是多部分,它可能非常昂贵。相反,使用if(msg.isMimeType("multipart/*"))
。
另请注意,您的多部分循环将只处理最简单的消息。如果消息包含嵌套在多部分中的多部分,它将失败。通常这只是您可能不想处理的签名或加密消息。如果“附件”没有预期的Content-Distion标头或未指定文件名,它将失败。(希望这种情况现在很少见,但有些人仍然使用旧的或损坏的邮件。)
最后,您不应该使用邮件消息中包含的文件名“原样”。这个名字永远不应该被信任。它可能用于覆盖磁盘上的文件。
最近我在通过oracle-javamail从我的电子邮件下载CSV时遇到了一个问题。我发现第一个工作正常(来自大型机服务器),但是第二个csv附件似乎是“应用程序/vnd.ms-excel”,当它显然是一个. csv文件时,就像另一个下载完全正常的文件一样。 我在这两个问题上使用了相同的代码,但找不到有关此问题的任何信息。 如果我把那封电子邮件发给自己,我可以神奇地下载附件而没有任何问题。任何帮助
如何从内容类型为“多部分/备选”的邮件中下载附件;
在下载附件时,我得到了一个额外的类型的文件。我正在使用这是我的下载附件代码 这里是一个将作为参数和其他一些参数的类。是定义为
从JS开始不是我的优势之一。在过去的几天里,我一直在尝试编辑这个JS函数,使其强制下载bas64图像。当点击下载按钮时,该函数的作用是打开一个带有图像的新窗口。然后用户必须右键单击并保存图片。我试图强制下载图像,而不是右键单击并另存为。 dataurl生成base4 png字符串(数据:image/jpeg;base64,/9j/4aaqskzjrgabaaqabaad/2wbdaaaebaqeb
使用javamail解析eml中的eps附件是否需要任何特殊处理我没有任何问题其他类型的附件。只有eps附件出现问题 当我使用outlook 2010发送eps附件时,它会将编码从base64转换为可打印的引号。 下面是我试图解析的EPS附件的标题。 内容类型:应用/postscript;name=“LOGO.eps”内容传输编码:引用可打印内容配置:附件;filename=“LOGO.eps”
我使用下面的代码将pdf文件附加到邮件(JAVAMAIL)中。这个位置工作完美,并添加附件到我的邮件,但这邮件没有任何正文。 当我将下面的行添加到我的代码中时,它会删除附件并发送给我只包含文本的邮件。 请帮助我添加附件和测试体到我的邮件。