Java 发送带有MimMultipart(附件文件和文本)和JBoss 6.3的MimMessage

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程序中发送一封带有附件的电子邮件

但是我面临一个问题,当我通过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日志中没有错误或警告,感谢您提供的链接和属性中的错误。这是一个复制错误。