Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GMail不显示用JavaMail API发送的电子邮件的HTML-/内联部分_Java_Html_Gmail_Jakarta Mail_Inline - Fatal编程技术网

GMail不显示用JavaMail API发送的电子邮件的HTML-/内联部分

GMail不显示用JavaMail API发送的电子邮件的HTML-/内联部分,java,html,gmail,jakarta-mail,inline,Java,Html,Gmail,Jakarta Mail,Inline,每当我遇到Java问题时,我总是在stackoverflow上找到答案,而不需要自己问问题,但这次连谷歌都帮不了我。我就是想不出确切的问题,试着吻我的问题 当我接收并打开用JavaMail API创建和发送的邮件时,Thunderbird中的一切都很好。HTML部分显示其内联图像,纯文本在底部,但Gmail不会显示HTML部分。相反,它只显示纯文本和附件(因此我的内联图像根本不可见)。Gmail说电子邮件没有编码,我不确定这是否会导致问题 邮件的结构如下: - MimeMultipart

每当我遇到Java问题时,我总是在stackoverflow上找到答案,而不需要自己问问题,但这次连谷歌都帮不了我。我就是想不出确切的问题,试着吻我的问题

当我接收并打开用JavaMail API创建和发送的邮件时,Thunderbird中的一切都很好。HTML部分显示其内联图像,纯文本在底部,但Gmail不会显示HTML部分。相反,它只显示纯文本和附件(因此我的内联图像根本不可见)。Gmail说电子邮件没有编码,我不确定这是否会导致问题

邮件的结构如下:

    - MimeMultipart mixed
    -- BodyPart (attachment)
    -- BodyPart (as a container)
    --- MimeMultipart alternative
    ---- BodyPart (plaintext)
    ---- BodyPart (as a second container)
    ----- MimeMultipart related
    ------ BodyPart (html)
    ------ BodyPart (inline)
我创建消息的部分:

    MimeBodyPart BPhtml = new MimeBodyPart();
    BPhtml.setContent("<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"></head><body>Take a look at this image:<br><br><IMG src=\"cid:fileNamePlusUniqueHash\"></body></html>", "text/html; charset=utf-8");

    MimeBodyPart BPinline = new MimeBodyPart();
    BPinline.setDataHandler(new DataHandler(new FileDataSource(pathToImage)));
    BPinline.setFileName(fileName);
    // Note: my CID is a combination of the image's fileName and a salt/hash - unique:
    BPinline.setHeader("Content-ID", "<fileNamePlusUniqueHash>");
    BPinline.setDisposition(MimeBodyPart.INLINE);

    MimeMultipart MPrel = new MimeMultipart("related");
    MPrel.addBodyPart(BPhtml);
    MPrel.addBodyPart(BPinline);

    MimeBodyPart BPcon1 = new MimeBodyPart();
    BPcon1.setContent(MPrel);

    MimeBodyPart BPplain = new MimeBodyPart();
    BPplain.setText("Plain text", "text/plain; charset=utf-8");

    MimeMultipart MPalt = new MimeMultipart("alternative");
    MPalt.addBodyPart(BPcon1);
    MPalt.addBodyPart(BPplain);

    MimeBodyPart BPcon2 = new MimeBodyPart();
    BPcon2.setContent(MPalt);

    MimeBodyPart BPattach = new MimeBodyPart();
    BPattach.attachFile(new File(pathToAttachment));

    MimeMultipart MPmx = new MimeMultipart();
    MPmx.addBodyPart(BPcon2);
    MPmx.addBodyPart(BPattach);

    MimeMessage message = new MimeMessage(Session.getInstance(properties, null));
    message.setContent(MPmx);

    // ... set recipients, sender, subject, e.g. ...

    Transport.send(message);
MimeBodyPart BPhtml=新的MimeBodyPart();
setContent(“看看这个图像:

”,“text/html;charset=utf-8”); MimeBodyPart BPinline=新的MimeBodyPart(); setDataHandler(新的DataHandler(新的FileDataSource(pathToImage)); BPinline.setFileName(文件名); //注意:我的CID是图像文件名和salt/hash的组合-唯一: BPinline.setHeader(“内容ID”,即“”); setDisposition(MimeBodyPart.INLINE); MimMultipart MPrel=新的MimMultipart(“相关”); MPrel.addBodyPart(BPhtml); MPrel.addBodyPart(BPinline); MimeBodyPart BPcon1=新的MimeBodyPart(); BPcon1.设置内容(MPrel); MimeBodyPart BPplain=新的MimeBodyPart(); setText(“纯文本”、“文本/纯文本;字符集=utf-8”); MimMultipart MPalt=新的MimMultipart(“备选方案”); MPalt.附加车身部件(BPcon1); MPalt.附加车身部件(BPplain); MimeBodyPart BPcon2=新的MimeBodyPart(); BPcon2.设置内容(MPalt); MimeBodyPart BPattach=新的MimeBodyPart(); attachFile(新文件(pathToAttachment)); MimeMultipart MPmx=新的MimeMultipart(); MPmx.addBodyPart(BPcon2); MPmx.addBodyPart(BPattach); MimeMessage message=新的MimeMessage(Session.getInstance(properties,null)); message.setContent(MPmx); // ... 设置收件人、发件人、主题,例如。。。 传输。发送(消息);
电子邮件来源:

    [...] (delivered, received, subject, e.g., ask for more if important)

    MIME-Version: 1.0
    Content-Type: multipart/mixed; 
            boundary="----=_Part_0_1248658274.1455785789602"

    ------=_Part_0_1248658274.1455785789602
    Content-Type: multipart/alternative; 
            boundary="----=_Part_1_860340994.1455785789629"

    ------=_Part_1_860340994.1455785789629
    Content-Type: multipart/related; 
            boundary="----=_Part_2_743690907.1455785789629"

    ------=_Part_2_743690907.1455785789629
    Content-Type: text/html; charset=utf-8
    Content-Transfer-Encoding: 7bit
    <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body>Take a look at this image:<br><br></html><IMG src="cid:blabla.pngPlusUniqueHash"></body>

    ------=_Part_2_743690907.1455785789629
    Content-Type: application/octet-stream; name=blabla.png
    Content-Transfer-Encoding: base64
    Content-Disposition: inline; filename=blabla.png
    Content-ID: <blabla.pngPlusUniqueHash>
    iVBORw0KGgoAAAANSUhEUgAAAPEAAAEdCAIAAABSWBYTAAAYpklEQVR4nO2dXawkR3mGR4 [...] (some hundred lines more)

    ------=_Part_2_743690907.1455785789629--

    ------=_Part_1_860340994.1455785789629
    Content-Type: text/plain; charset=us-ascii
    Content-Transfer-Encoding: 7bit
    plain text

    ------=_Part_1_860340994.1455785789629--

    ------=_Part_0_1248658274.1455785789602
    Content-Type: application/octet-stream; name=blabla.pdf
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename=blabla.pdf
    UEsDBBQACAgIAERuSEgAAAAAAAAAAAAAAAALAAAARW50aXR5U3RvcmXsfQl8G8W5+NqxfM [...] (some hundred lines more)

    ------=_Part_0_1248658274.1455785789602--
[…](交付、接收、主题,如重要时要求更多)
MIME版本:1.0
内容类型:多部分/混合;
boundary=“---=\u Part\u 0\u 1248658274.1455785789602”
------=_部分_0_1248658274.1455785789602
内容类型:多部分/备选;
boundary=“---=\u Part_1\u 860340994.1455785789629”
------=_第1部分_860340994.1455785789629
内容类型:多部分/相关;
boundary=“---=\u Part\u 2\u 743690907.1455785789629”
------=\u第2部分\u 743690907.1455785789629
内容类型:text/html;字符集=utf-8
内容传输编码:7bit
请看这张图片:

------=\u第2部分\u 743690907.1455785789629 内容类型:应用程序/八位字节流;name=blabla.png 内容传输编码:base64 内容配置:内联;filename=blabla.png 内容ID: IVBORW0KGGOAAAANSUHEUGAAPEADCAIAABSWBYTAAYPKLEQVR4NO2DXAWKR3MGR4[…](还有几百行) ------=\u第2部分\u 743690907.1455785789629-- ------=_第1部分_860340994.1455785789629 内容类型:文本/纯文本;字符集=美国ascii码 内容传输编码:7bit 纯文本 ------=_第1部分_860340994.1455785789629-- ------=_部分_0_1248658274.1455785789602 内容类型:应用程序/八位字节流;name=blabla.pdf 内容传输编码:base64 内容处置:附件;filename=blabla.pdf UESDBBQacagiaerusegaaaaaaaaaaarw50axr5u3rvcmxsfql8g8w5+NqxfM[…](还有大约一百行) ------=_部分_0_1248658274.1455785789602--
我尝试了很多不同的方法来添加附件/内联(例如InputStreamReader),但没有任何改变。你能帮我找出错误吗?我推测这条消息的结构不正确

向你问好,芬利尔

编辑
我将邮件发送给了另一个提供商(GMX),在HTML部分的表示方面没有问题,所以我想这是Gmail本身的问题。是否有避免此问题的最佳做法?

更新

所以我尝试了一些不同的邮件结构,最后得到了一封可以正常工作的Gmail邮件!但是解决办法很奇怪,我还是不明白

我唯一更改的是多部分替代MimeType。而不是使用

MPalt = new MimeMultipart("alternative");
我把它改成了

MPalt = new MimeMultipart();
然后将HTML BodyPart和内联BodyPart添加到其中。但在我看来,这毫无意义——有人能解释这种奇怪的行为吗

注意:非工作邮件源代码-“代码”和工作邮件源代码之间没有区别。我很困惑

向你问好,芬利尔

编辑:

单击此处查看屏幕截图:

我对我的Gmail收件箱做了一个截图,正如你所看到的,谷歌只对PLINHT(一种用普通、html和内联图像创建的邮件)和PLINHTAT有问题

    case PLINHTAT:
        mimeMultipart = new MimeMultipart("mixed");

        bpHtml = new MimeBodyPart();
        bpHtml.setContent(this.htmlText, "text/html; charset=utf-8");

        mpRel = new MimeMultipart("related");
        mpRel.addBodyPart(bpHtml);

        bpInlines = this.getInlineAttachmentBodyParts();
        for (int i = 0; i < bpInlines.length; i++)
            mpRel.addBodyPart(bpInlines[i]);

        bpCon1 = new MimeBodyPart();
        bpCon1.setContent(mpRel);

        bpPlain = new MimeBodyPart();
        bpPlain.setText(this.plainText);

        mpAlt = new MimeMultipart("alternative");
        mpAlt.addBodyPart(bpPlain);
        mpAlt.addBodyPart(bpCon1);

        bpCon2 = new MimeBodyPart();
        bpCon2.setContent(mpAlt);

        mimeMultipart.addBodyPart(bpCon2);

        bpAttaches = this.getAttachmentBodyParts();
        for (int i = 0; i < bpAttaches.length; i++)
            mimeMultipart.addBodyPart(bpAttaches[i]);

        break;

    case PLINHT:
        bpHtml = new MimeBodyPart();
        bpHtml.setContent(this.htmlText, "text/html; charset=utf-8");

        mpRel = new MimeMultipart("related");
        mpRel.addBodyPart(bpHtml);

        bpInlines = this.getInlineAttachmentBodyParts();
        for (int i = 0; i < bpInlines.length; i++)
            mpRel.addBodyPart(bpInlines[i]);

        bpCon1 = new MimeBodyPart();
        bpCon1.setContent(mpRel);

        bpPlain = new MimeBodyPart();
        bpPlain.setText(this.plainText);

        mimeMultipart = new MimeMultipart("alternative");
        mimeMultipart.addBodyPart(bpCon1);
        mimeMultipart.addBodyPart(bpPlain);

        break;
case PLINHTAT:
mimeMultipart=新的mimeMultipart(“混合”);
bpHtml=新的MimeBodyPart();
setContent(this.htmlText,“text/html;charset=utf-8”);
mpRel=新的MimeMultipart(“相关”);
mpRel.addBodyPart(bpHtml);
bpInlines=this.getInlineAttachmentBodyParts();
for(int i=0;i    case ATHTIN:
        bpHtml = new MimeBodyPart();
        bpHtml.setContent(this.htmlText, "text/html; charset=utf-8");

        mpRel = new MimeMultipart("related");
        mpRel.addBodyPart(bpHtml);

        bpInlines = this.getInlineAttachmentBodyParts();
        for (int i = 0; i < bpInlines.length; i++)
            mpRel.addBodyPart(bpInlines[i]);

        bpCon1 = new MimeBodyPart();
        bpCon1.setContent(mpRel);

        mimeMultipart = new MimeMultipart("mixed");
        mimeMultipart.addBodyPart(bpCon1);

        bpAttaches = this.getAttachmentBodyParts();
        for (int i = 0; i < bpAttaches.length; i++)
            mimeMultipart.addBodyPart(bpAttaches[i]);

        break;

    case PLHT:
        bpHtml = new MimeBodyPart();
        bpHtml.setContent(this.htmlText, "text/html; charset=utf-8");

        bpPlain = new MimeBodyPart();
        bpPlain.setText(this.plainText);

        mimeMultipart = new MimeMultipart("alternative");
        mimeMultipart.addBodyPart(bpPlain);
        mimeMultipart.addBodyPart(bpHtml);

        break;
    case PLINHTAT:
        mimeMultipart = new MimeMultipart("mixed");
        bpHtml = new MimeBodyPart();
        bpHtml.setContent(this.htmlText, "text/html; charset=utf-8");
        mpRel = new MimeMultipart("related");
        mpRel.addBodyPart(bpHtml);
        bpInlines = this.getInlineAttachmentBodyParts();
        for (int i = 0; i < bpInlines.length; i++)
            mpRel.addBodyPart(bpInlines[i]);
        bpCon1 = new MimeBodyPart();
        bpCon1.setContent(mpRel);
        bpPlain = new MimeBodyPart();
        bpPlain.setText(this.plainText);
        mpAlt = new MimeMultipart("alternative");
        mpAlt.addBodyPart(bpPlain);
        mpAlt.addBodyPart(bpCon1);
        bpCon2 = new MimeBodyPart();
        bpCon2.setContent(mpAlt);
        mimeMultipart.addBodyPart(bpCon2);
        bpAttaches = this.getAttachmentBodyParts();
        for (int i = 0; i < bpAttaches.length; i++)
            mimeMultipart.addBodyPart(bpAttaches[i]);
        break;