2017-04-13 95 views
1

我想通过javamail发送包含zip文件的附件。然而,在发送它抛出一个异常作为无法通过javamail发送zip文件

com.sun.mail.smtp.SMTPSendFailedException:被封锁552-5.7.0此消息,因为它的内容提出了一个潜在的552-5.7.0安全问题。

我添加MIME内容类型application/zip但面临

javax.mail.MessagingException: IOException while sending message; 
nested exception is: 
javax.activation.UnsupportedDataTypeException: no object DCH for MIME type 
application/zip at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1167) 

下面是我的代码片段:

BodyPart messageBodyPart = new MimeBodyPart(); 
messageBodyPart.setContent(message, "application/zip"); 
Multipart multipart = new MimeMultipart(); 
multipart.addBodyPart(messageBodyPart); 
File srcFile = new File(System.getProperty("user.dir")+ "/Reports/"); 
messageBodyPart = new MimeBodyPart(); 
DataSource source = new FileDataSource(srcFile.getPath()+"/Report.zip"); 
messageBodyPart.setDataHandler(new DataHandler(source)); 
messageBodyPart.setFileName("Report.zip"); 
multipart.addBodyPart(messageBodyPart); 
message.setContent(multipart); 
Transport.send(message); 

当我删除.zip扩展它工作正常,但不能与.ZIP 。

+2

什么时候会发生?第一个错误似乎表明你的邮件服务器不喜欢zip-attachments,第二个错误是完全不同的,并且在电子邮件交给服务器之前发生。这是什么? –

+0

@Mark Rotteveel:所有的错误都来自'Transport.send(message);'。 – biz00ka

+0

但你应该得到一个或另一个。不是都。当你遇到一个错误时,请仔细描述另一个错误。 –

回答

1

您的代码添加了两次附件,我确定这不是您想要的。用您的代码替换:

MimeBodyPart messageBodyPart = new MimeBodyPart(); 
String srcFile = System.getProperty("user.dir") + "/Reports/Report.zip"; 
messageBodyPart.attachFile(srcFile, "application/zip", "base64"); 
multipart.addBodyPart(messageBodyPart); 
message.setContent(multipart); 
Transport.send(message); 
+0

:我根据您的输入更改了我的代码。然而,'messageBodyPart.attachFile(srcFile,“application/zip”,“base64”);'只在我的代码中使用一个参数。执行后,它仍然显示'com.sun.mail.smtp.SMTPSendFailedException:552-5.7.0此消息被阻止,因为它的内容在'transport.send(message)'处出现潜在的552-5.7.0安全问题' – biz00ka

+0

有多个attachFile方法。只有一个参数的将为您选择MIME类型和编码。如果您想强制MIME类型为application/zip,则需要带有三个参数的版本。当然,这些都不会绕过电子邮件服务的安全限制,从而阻止您发送zip文件。为此,您需要与您的电子邮件服务提供商交谈,或者以附加zip文件以外的方式发送您的数据。 –