为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?

Posted

技术标签:

【中文标题】为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?【英文标题】:Why encoding headers content type: text/html; is missing when use MailItem in Outlook plugin, whith the SMTP server of GMAIL: SMTP.GMAIL.COM?为什么编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM? 【发布时间】:2018-01-02 13:00:20 【问题描述】:

我尝试将 html 发送到 gmail 帐户,从 gmail SMTP 服务器。

如果我编写这样的代码并发送 HTML 就没有问题。

        MailMessage mail = new MailMessage("aaaa@gmail.com", to, subject, body);
        mail.IsBodyHtml = true;
        SmtpClient smtpClient = new SmtpClient(smtp);
        smtpClient.EnableSsl = true;

        smtpClient.Port = 587;
        smtpClient.Credentials = new NetworkCredential(userName, password);
        smtpClient.Send(mail);

gmail 帐户中收到的电子邮件是 base64 带有标题:

Subject: Test
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64

PGh0bWw==(这个base 64无效,仅供提问)

但如果我使用 Outlook.MailItem 发送我的电子邮件,我会得到什么......

Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable


   <https://fdsafasdfasd.com/images/logo.png> =09

Cedric Boivin


cboivin@fadsfdasfads.com


Vous a envoy=E9 un message s=E9curis=E9 vifdasfasdfes

我的文本在 Gmail 中显示为清晰,而不是 HTML。 Outlook插件中有我的代码

 Microsoft.Office.Interop.Outlook.MailItem newMail = Globals.ThisAddIn.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
                // newMail.Display(false);                                        
                newMail.Subject = subject;

                newMail.To = email.ToLower().Trim();
                newMail.Recipients.ResolveAll();
                newMail.BodyFormat = Microsoft.Office.Interop.Outlook.OlBodyFormat.olFormatHTML;
                newMail.HTMLBody = htmlBody;
                newMail.Send();

有什么建议吗?

【问题讨论】:

【参考方案1】:

我使用您的 Outlook 邮件代码测试发送邮件,我可以在我的 gmail 帐户中正确看到 HTML 格式的邮件。我的环境是:VS 2015 / Outlook 2016

有趣的是,在我的测试中,我同时看到了 Content-Type: text/plain;Content-Type: text/html;。代码只是单独设置HtmlBody

在您发送邮件后,如果您在 Outlook 中查看“已发送项目” - 邮件的格式是什么?

您的 Outlook 设置中的某些内容可能正在将其转换为纯文本!在旧版本的 Outlook 中,有一个 convert to Plain text for specific users 选项。您是否有任何机会使用这些版本中的任何一个并打开此选项?

在我的测试中,只有当我设置.Body 而不是.HtmlBody,即newMail.Body = htmlBody; 时,我才会得到你的行为

【讨论】:

您需要检查 Gmail 收到的项目。在前景中一切都很好。你也可以看看我在微软论坛social.msdn.microsoft.com/Forums/en-US/…的帖子 另一个想法 - 你可以尝试验证你的 HTML 吗?您的 HTML 中是否有 gmail 不喜欢的内容? 好问题,我会试试的 您是否向 gmail 帐户发送了电子邮件?还是转到另一个帐户?【参考方案2】:

我发现了问题。

在我的发送电子邮件中,我为 mailItem 设置了一些属性。

这和这篇文章有关……

Prevent winmail.dat in outlook (for gmail accounts)

如果我删除它们...一切正常。

【讨论】:

干得好,也许在你问的变体上链接到这个答案,将来一定会帮助别人。

以上是关于为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 RestKit 会更改我的响应内容类型?

为啥我们需要设置标头请求的内容类型

为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?

为啥 Jetty 使用 text/html 内容类型提供 css

为啥 Jetty 使用 text/html 内容类型提供 css

Zend_Http_Client - 为啥我的 POST 请求发送错误的内容类型标头?