【问题标题】:Outlook/Word Autoformats VBA Generated EmailOutlook/Word 自动格式化 VBA 生成的电子邮件
【发布时间】:2019-09-11 15:11:02
【问题描述】:

我正在尝试使用 Excel 宏生成并预览电子邮件。本质上,我正在使用CreateItem(0) 创建一个新的MailItem,设置HTMLBody 属性,然后调用myemail.Displaymyemail.Display 在 Outlook 的检查器中打开电子邮件,AFAIK 首先通过某种 Microsoft Word 解析器运行电子邮件,该解析器去除了大部分格式。如果我不调用myemail.Display 而只是调用myemail.Send,则电子邮件的格式正确,但在这个用例中,我们真的希望能够先预览电子邮件。

被剥离的特定格式是所有左对齐的文本都居中。这不是什么大不了的事,但如果我能理解这种行为就好了。一些潜在的解决方案/答案可能包括: 1.如何格式化HTML,这样Word就不会剥离格式 2.如何完全关闭Word解析引擎 3. 如何关闭Word自动居中

我尝试过的最有希望的事情是制作一个左对齐的表格,但是 Outlook/Word 在表格之后添加了一个额外丑陋的两个空行。许多解决方案看起来都不错,但格式化/预览的重点是因为电子邮件正在发送给重要的人,所以我希望它看起来尽可能好。

这是一个 Outlook/Word 将自动居中文本的示例

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)

With OutMail
   .To = "someemail@email.com"
   .BCC = ""
   .Subject = "a subjhect"
   .SentOnBehalfOfName = "anotheremail@email.com"
   .HTMLBody = "here is some text that will be auto centered"
   .Display
End With

【问题讨论】:

  • 我从未遇到过这个问题。您能否分享您用于“.HTMLBody”的确切字符串
  • Word 默认不设置居中格式。 Word 中的格式由样式 控制。听起来好像正在应用于电子邮件的模板中的 Normal 样式已更改为居中。我不是 Outlook 专家,所以不太确定如何查找和编辑此模板,我只记得(因为几个 Office 版本)有一个单独的电子邮件模板。如果没有 Outlook 人员跳到这里,研究可能会让您更进一步。或者询问如何在最终用户论坛中找到它。
  • 在 Outlook 中控制样式的模板是 NormalEmail.dotm。通常可以在 C:\Users\\AppData\Roaming\Microsoft\Templates 中找到它。要编辑此模板 1) 关闭 Outlook,2) 在 Word 中打开模板,3) 保存对模板的更改,4) 打开 Outlook 并创建新邮件。您所做的更改不会应用于现有的邮件或草稿。
  • 例如,如果您使用.HTMLBody = "<html><body><p align=""left"">here is some text that will be auto centered</p></body></html>",那么至少在我的 Outlook 中(如果您的计算机速度很慢),您实际上可以看到电子邮件开始左对齐,然后文本将居中。另一件需要注意的事情是,如果您不调用 .Display 而只是调用 .Send,则电子邮件将被正确格式化。另一件事是,如果您创建一个模板,添加一些右对齐或左对齐的文本,然后调用.CreateItemFromTemplate(myTemplte),然后调用.Display,Outlook 将使文本居中。

标签: html excel vba outlook ms-word


【解决方案1】:

您的 .HTMLBody 目前实际上并不包含任何 HTML。各种渲染引擎对 HTML 电子邮件的解析方式不同,因此您可以全面使用的实际 HTML 子集可以通过反复试验来确定。

但是对于像简单的左对齐这样的事情,它不应该太复杂。

可能是这样的:

.HTMLBody = "<html><body><p align="left">here is some text that will be auto centered</p></body></html>"

我想我的意思是,居中不是来自您的代码,除非可能是遗漏。格式标记的缺乏将其留给渲染引擎来决定如何最好地显示它。

根据您随后的评论,我建议坚持使用表格(根据我的经验,它们通常是格式化 HTML 电子邮件的最可靠方法),但您可能需要在文档 HEAD 中添加一些 Outlook 特定的 CSS 以进行排序去掉多余的间距:

/* 阻止 Outlook 在表格中添加额外的间距。 */ 桌子, td { mso-table-lspace: 0pt !important; mso-table-rspace: 0pt !important; }

如果这有帮助,您可以在 ContactMonkey 找到上述(以及更多提示)

【讨论】:

  • 当我试图让它工作时,HTMLBody 中有实际的 HTML。我没有在问题本身中提出任何问题,因为我尝试了许多不同的东西,但我无法让它们中的任何一个起作用,并且没有必要对电子邮件的这个特定部分使用 HTML。 Align="left" 是我尝试的第一件事。正如我所说,唯一接近工作的是使用左对齐表格,但在那之后添加了额外的换行符,所以这也不是很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2021-12-29
  • 2019-02-26
相关资源
最近更新 更多