web-dev-qa-db-ja.com

Javaメールを使用してHTMLメールに画像を埋め込む

HTMLと画像をjavamailで送信していますが、何らかの理由で画像がHTMLの一部として表示されず、添付ファイルとしてのみ表示されます。なぜなのかわかりません。これは、私のユーザーの1人が電子メールを受信したときの様子です。 enter image description here

また、htmlがどのように見えるかについても言及したいと思います。

private String generateActivationLinkTemplate() {
    String htmlText = "";
htmlText ="<table width=\"600\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">  <tr>    <td><img src=\"cid:logoimg\"/></td>  </tr>  <tr>    <td height=\"220\"> <p>Thanks for Joining Site.com</p>      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. </p>    <p>Username:<br />      Password: </p>    <p>To confirm your email click <a href=\"#\">here</a>.</p></td>  </tr>  <tr>    <td height=\"50\" align=\"center\" valign=\"middle\" bgcolor=\"#CCCCCC\">www.site.com | [email protected] | +38200 123 456</td>  </tr></table>";}

Html、body、headタグが必要ですか...?

Java実装は次のようになります。

@Stateless(name = "ejbs/EmailServiceEJB")
public class EmailServiceEJB implements IEmailServiceEJB {

@Resource(name = "mail/myMailSession")
private Session mailSession;

public void sendAccountActivationLinkToBuyer(String destinationEmail,
        String name) {

    // Destination of the email
    String to = destinationEmail;
    String from = "[email protected]";

    try {
        Message message = new MimeMessage(mailSession);
        // From: is our service
        message.setFrom(new InternetAddress(from));
        // To: destination given
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        message.setSubject("Uspijesna registracija");
        // How to found at http://www.rgagnon.com/javadetails/Java-0321.html
        message.setContent(generateActivationLinkTemplate(), "text/html");

        Date timeStamp = new Date();
        message.setSentDate(timeStamp);

        // Prepare a multipart HTML
        Multipart multipart = new MimeMultipart();
        // Prepare the HTML
        BodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(generateActivationLinkTemplate(), "text/html");

        // PREPARE THE IMAGE
        BodyPart imgPart = new MimeBodyPart();

        String fileName = "logoemailtemplate.png";

        ClassLoader classLoader = Thread.currentThread()
                .getContextClassLoader();
        if (classLoader == null) {
            classLoader = this.getClass().getClassLoader();
            if (classLoader == null) {
                System.out.println("IT IS NULL AGAIN!!!!");
            }
        }

        DataSource ds = new URLDataSource(classLoader.getResource(fileName));

        imgPart.setDataHandler(new DataHandler(ds));
        imgPart.setHeader("Content-ID", "logoimg");

        multipart.addBodyPart(imgPart);
        multipart.addBodyPart(htmlPart);            

        // Set the message content!
        message.setContent(multipart);

        Transport.send(message);

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }

}

Javaの部分は問題ないように見えますが、疑わしいのはhtmlマークアップだけです。何か問題がありますか?imgタグが正しく機能していないと思います。理由はありません。画像はメールに表示されません(添付ファイルとしてのみ表示されることに注意してください):

<img src=\"cid:logoimg\"/>
15
sfrj

Content-typeが正しく、画像のcontent-dispositionがインラインに設定されていることを確認しましたか?

また、Content-IDはグローバルに一意である必要があります。「logoimg」とだけ言うことはできません。 [email protected]をお試しください。それはあなたの問題ではないかもしれません。

9
Ben

エラーは_<img src=\"cid:logoimg\"/>_が原因です

次のようになります:imgPart.setHeader("Content-ID", "<logoimg>");

ない:imgPart.setHeader("Content-ID", "logoimg");

つまり、「<」と「>」が必要です

8
Craigo