通过 Outlook 插件编辑电子邮件正文中的文本
Posted
技术标签:
【中文标题】通过 Outlook 插件编辑电子邮件正文中的文本【英文标题】:Editing text in body of email via Outlook add-in 【发布时间】:2018-08-16 13:56:32 【问题描述】:以下是 MS Outlook 的加载项。可以扫描电子邮件的正文,如果存在某个(特定的词或模式)词,则会出现一个 MessageBox。但是,我想知道是否可以在没有任何 MessageBox 的情况下更改单词的显示方式或编辑电子邮件正文中的文本。例如,一个词(如公司名称)可以转换为超链接(即 Google 到 www.google.com 或 Microsoft 到 www.microsoft.com),并且在 Outlook 上阅读电子邮件的用户总是看到超链接而不是单词本身。
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core;
using System.Drawing;
using System.Diagnostics;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Text.RegularExpressions;
namespace FirstOutlookAddIn
public partial class ThisAddIn
public static string[] data = new string[10];
public static Stopwatch timer = new Stopwatch();
Outlook.NameSpace outlookNameSpace;
Outlook.MAPIFolder inbox;
Outlook.Items items;
private void ThisAddIn_Startup(object sender, System.EventArgs e)
timer = Stopwatch.StartNew(); ReadMail();
outlookNameSpace = this.Application.GetNamespace("MAPI");
inbox = outlookNameSpace.GetDefaultFolder(
Microsoft.Office.Interop.Outlook.
OlDefaultFolders.olFolderInbox);
items = inbox.Items;
items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ReadSingleMail); // Modified method to run for single email
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
// Hinweis: Outlook löst dieses Ereignis nicht mehr aus. Wenn Code vorhanden ist, der
// ausgeführt werden muss, wenn Outlook geschlossen wird, informieren Sie sich unter http://go.microsoft.com/fwlink/?LinkId=506785
static void ReadSingleMail(dynamic item)
string bodyText; // Email body
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //Path to My Documents
if (item != null)
bodyText = item.Body;
else
return; // If no e-mail body, exit function.
static void ReadMail()
//Set up OCR
string bodyText;
string mydocpath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
//Get unread emails from Inbox
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items unreadItems = inboxFolder.Items.Restrict("[Unread]=true");
int max_runs;
//Go through each Unread email
if (unreadItems.Count > 10) max_runs = 10;
else max_runs = unreadItems.Count;
for (int counter = 1; counter <= max_runs; counter++)
//Reinitialize Data array
for (int index = 0; index <= 8; index++)
data[index] = "";
dynamic item = unreadItems[counter];
bodyText = item.Body;
Match match = Regex.Match(bodyText, "Insert searched pattern here");
if (match.Success)
MessageBox.Show(match.Value);
match = match.NextMatch();
#region Von VSTO generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung.
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InternalStartup()
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
#endregion
【问题讨论】:
出现什么消息框? @BugFinder,出现的消息框通过我的示例代码中的正则表达式打印搜索到的单词/模式的值。似乎是因为我只是为了举例而以这种方式对其进行了编程。我希望我很清楚并且能够回答您的问题。如果没有,请告诉我。 所以如果你不想要消息框,不要编码一个 @BugFinder,是的。但我的问题是是否可以编辑传入电子邮件的电子邮件正文中的文本。 MessageBox 只是用于演示目的的示例。我想展示我到目前为止所做的尝试。 嗯.. 可以而且应该是不同的东西,但当然你可以收到一封电子邮件,让它自动更改邮件中的内容并保存它.. 你可以在 Outlook 中使用规则来做到这一点..但你需要去尝试一下 【参考方案1】:如下创建函数 ReadMail() 替换文本,正如我想要的那样。
static void ReadMail()
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
inboxFolder = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
Outlook.Items Items = inboxFolder.Items.Restrict("[LastModificationTime] > '01/1/2003'");
foreach (var item in Items)
var mail = (Outlook.MailItem)item;
mail.Body = mail.Body.Replace("Text to be replaced", "Replacing text");
mail.Save();
【讨论】:
以上是关于通过 Outlook 插件编辑电子邮件正文中的文本的主要内容,如果未能解决你的问题,请参考以下文章
通过outlook发送R Markdown输出作为正文电子邮件(RDCOMclient)
Outlook VSTO附件在邮件主题中选择了文本和上下文菜单