为啥编码标头内容类型: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?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在路由到 REST WebAPI 获取方法时需要内容类型标头?
为啥 Jetty 使用 text/html 内容类型提供 css