JavaMail MimeMultiPart не отправляет весь контент

Я некоторое время застрял со странной проблемой, и я действительно не вижу ничего плохого в своем коде. Я пытаюсь отправить электронное письмо с помощью java, где я прикрепляю изображение к сообщению. Сначала у меня есть сообщение с простым текстом, а затем изображение, которое я прикрепляю и использую html для его отображения.

Вот как я думаю, это должно выглядеть:

+-----------------------------------------------+ 
| multipart/related                             | 
| +---------------------------+  +------------+ | 
| |multipart/alternative      |  | image/gif  | | 
| | +-----------+ +---------+ |  |            | | 
| | |text/plain | |text/html| |  |            | | 
| | +-----------+ +---------+ |  |            | | 
| +---------------------------+  +------------+ | 
+-----------------------------------------------+

Вот мой код:

public void sendEmail(Email email) throws MessagingException {
    String[] recipients = email.getRecipients();
    // Set the host smtp address
    Properties props = new Properties();
    props.put("mail.smtp.host", host);
    props.put("mail.smtp.port", port);
    //props.put("mail.smtps.auth", "true");

    // create some properties and get the default Session
    Session session = Session.getDefaultInstance(props, null);
    session.setDebug(debug);

    // create a message
    MimeMessage msg = new MimeMessage(session);

    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(email.getFrom());
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++) {
        addressTo[i] = new InternetAddress(recipients[i]);
    }
    msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

    // Setting the Subject and Content Type
    msg.setSubject(email.getSubject());

    BodyPart mbp1 = new MimeBodyPart();
    mbp1.setContent(email.getMessage(), "text/plain");

    BodyPart mbp2 = new MimeBodyPart();
    mbp2.setContent("<html><body><br/><br/><br/><img src=\"cid:image"><br/>"
            + "Support<br/>"
            + "Carl Olofsson<br/>"
            + "Management Unit<br/>"
            + "----<br/>"
            + "----<br/>"
            + "Sweden<br/>"
            + "www.-----.com<br/></body></html>", "text/html");

    Multipart contentMultipart = new MimeMultipart("alternative");
    contentMultipart.addBodyPart(mbp1);
    contentMultipart.addBodyPart(mbp2);

    BodyPart contentBodyPart = new MimeBodyPart();
    contentBodyPart.setContent(contentMultipart);

    BodyPart mbp3 = new MimeBodyPart();
    DataSource ds = new FileDataSource("C:/Users/000/Desktop/image.jpg");
    mbp3.setDataHandler(new DataHandler(ds));
    mbp3.setHeader("Content-ID","image");

    Multipart entireMultipart = new MimeMultipart("related");
    entireMultipart.addBodyPart(contentBodyPart);
    entireMultipart.addBodyPart(mbp3);

    // attaching the multi-part to the message
    msg.setContent(entireMultipart);

    // set the message content here
    Transport t = session.getTransport("smtp");
    try {
        t.connect(host, username, password);
        t.sendMessage(msg, msg.getAllRecipients());
    } catch(Throwable throwable){
        LOG.error(throwable.getMessage());
    }finally {
        t.close();
    }
}

}

Сообщение отправлено, но единственное, что оно показывает, это «нижний колонтитул» с изображением, а не само сообщение!

Вы видите что-то не так в коде?

Заранее спасибо!


person user2099024    schedule 19.11.2013    source источник


Ответы (1)


Изображение на самом деле не связано с текстовой частью. Попробуйте изменить составные части:

multipart/alternative
  text/plain
  multipart/related
    text/html
    image/gif
person Bill Shannon    schedule 20.11.2013