Java 发送带有MimMultipart(附件文件和文本)和JBoss 6.3的MimMessage
我正试图在java程序中发送一封带有附件的电子邮件 但是我面临一个问题,当我通过JBoss服务器执行代码时,我收到一封空邮件(没有任何HTML标记)。当我通过JUnit测试执行代码时 我收到带有附件和正文的邮件 对于相同的输入数据,相同的邮件服务器,我面临两种不同的行为 当我不使用函数mail.setContent时,我会在我的2环境(JBoss和JUnit测试)中收到一封带有body的邮件 因此,我的问题似乎与setContent函数、MimeMultipart类型和JBoss执行有关 我使用:Java 发送带有MimMultipart(附件文件和文本)和JBoss 6.3的MimMessage,java,jboss,jakarta-mail,Java,Jboss,Jakarta Mail,我正试图在java程序中发送一封带有附件的电子邮件 但是我面临一个问题,当我通过JBoss服务器执行代码时,我收到一封空邮件(没有任何HTML标记)。当我通过JUnit测试执行代码时 我收到带有附件和正文的邮件 对于相同的输入数据,相同的邮件服务器,我面临两种不同的行为 当我不使用函数mail.setContent时,我会在我的2环境(JBoss和JUnit测试)中收到一封带有body的邮件 因此,我的问题似乎与setContent函数、MimeMultipart类型和JBoss执行有关 我使用
- Java jdk1.7.0_79
- Maven 3.3.9
- JBoss EAP 6.3
- javax.mail版本:1.6.0
public void sendWithAttachment(ByteArrayOutputStream attachmentByte, String filename) {
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", "myhost");
properties.setProperty("mail.smtp.port", "myport");
try {
final Address[] reply = {new InternetAddress("foo@test.fr")};
final Session session = Session.getDefaultInstance(properties, null);
final MimeMessage mail = new MimeMessage(session);
String recipient = "foo-recipient@test.fr";
String body = "test";
mail.setFrom(new InternetAddress("foo@test.fr","foo@test.fr"));
mail.setSubject("subject");
mail.setReplyTo(reply);
MimeMultipart multipart = generateAttachment(attachmentByte,filename,body);
mail.setContent(multipart);
final Transport transport = session.getTransport("smtp");
transport.connect();
mail.setRecipient(Message.RecipientType.TO, new InternetAddress(destinataire,destinataire));
transport.sendMessage(mail, mail.getAllRecipients());
transport.close();
} catch (final MessagingException | UnsupportedEncodingException me) {
me.printStackTrace();
}
}
private MimeMultipart generateAttachment(ByteArrayOutputStream attachmentByte, String filename, String body) throws MessagingException {
MimeMultipart res = new MimeMultipart();
byte[] poiBytes = attachmentByte.toByteArray();
DataSource dataSource = new ByteArrayDataSource(poiBytes, "application/octet-stream");
BodyPart attachmentBodyPart = new MimeBodyPart();
attachmentBodyPart.setDataHandler(new DataHandler(dataSource));
attachmentBodyPart.setFileName(filename);
BodyPart textBodyPart = new MimeBodyPart();
textBodyPart.setText(body);
textBodyPart.setContent(body, "text/html; charset=utf-8");
res.addBodyPart(textBodyPart);
res.addBodyPart(attachmentBodyPart);
return res;
}
你有什么想法或线索来解决我的问题吗
谢谢我知道这是一件小事,但我注意到您的端口和主机属性设置为相同
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", "myhost");
properties.setProperty("mail.smtp.host", "myport");
他们应该是
Properties properties = new Properties();
properties.setProperty("mail.smtp.host", "myhost");
properties.setProperty("mail.smtp.port", "myport");
我发现这个页面在最近运行poc时很有用 我找到了解决办法。
这个问题来自JBoss6JavaX库,它不同于MyAppJavaX库。
我使用以下命令修改我的应用程序中的jboss-deployment-structure.xml文件:
<exclusions>
<module name="javaee.api"/>
<module name="javax.mail.api"/>
</exclusions>
然后我加载所有外部jar:
<module name="modules.my.app" export="true" services="import"
slot="${framework.versionSlot}">
<imports>
<include path="**" />
</imports>
</module>
现在JBoss使用了好的库,它可以正常工作了检查服务器日志中的错误或警告,看看在
org.JBoss.as.mail
和javax.mail
包上启用调试日志时是否有更多的详细信息。JBoss日志中没有错误或警告,感谢您提供的链接和属性中的错误。这是一个复制错误。