在生成的电子邮件中添加默认Outlook签名

reg*_*gie 26 c# winforms outlook-2003

我正在使用它Microsoft.Office.Interop.Outlook.Application来生成电子邮件并在用户发送之前将其显示在屏幕上.应用程序是一个winform编码的应用C#.NET Framework 3.5 SP1,它是Microsoft Outlook 2003.我使用以下代码:

public static void GenerateEmail(string emailTo, string ccTo, string subject, string body)
    {
        var objOutlook = new Application();
        var mailItem = (MailItem)(objOutlook.CreateItem(OlItemType.olMailItem));        
        mailItem.To = emailTo;          
        mailItem.CC = ccTo;
        mailItem.Subject = subject;
        mailItem.HTMLBody = body;
        mailItem.Display(mailItem);
    }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如何在body生成的电子邮件中插入/添加正在使用该应用程序的用户的默认签名? 任何帮助赞赏.

Mic*_*van 46

有一个非常简单的方法,没有提到.见下面的修改:

public static void GenerateEmail(string emailTo, string ccTo, string subject, string body)
{
    var objOutlook = new Application();
    var mailItem = (MailItem)(objOutlook.CreateItem(OlItemType.olMailItem));        
    mailItem.To = emailTo;          
    mailItem.CC = ccTo;
    mailItem.Subject = subject;
    mailItem.Display(mailItem);
    mailItem.HTMLBody = body + mailItem.HTMLBody;
}
Run Code Online (Sandbox Code Playgroud)

通过在显示邮件项目后编辑HTMLBody,您允许Outlook执行添加默认签名的工作,然后进行复制,编辑和追加.

  • @Tewr concat不干净但效果很好,Outlook似乎很聪明,可以纠正这个问题.这些邮件在Gmail,Outlook网络邮件和Outlook应用程序中得到了很好的解释.此外,在Outlook应用程序中查找已发送和已接收邮件的HTML源时,HTML格式正确 (2认同)

Jam*_*ill 18

请看下面的链接.它解释了在文件系统中可以找到签名的位置以及如何正确读取它们.

http://social.msdn.microsoft.com/Forums/en/vsto/thread/86ce09e2-9526-4b53-b5bb-968c2b8ba6d6

该线程仅提到Window XP和Windows Vista签名位置.我已确认Windows 7上的Outlook签名与Vista位于同一位置.我还确认了Outlook 2003,2007和2010的签名位置相同.

如果您选择这条路线,这是一个代码示例.取自本网站.

private string ReadSignature()
{
    string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Microsoft\\Signatures";
    string signature = string.Empty;
    DirectoryInfo diInfo = new DirectoryInfo(appDataDir);

    if(diInfo.Exists)
    {
        FileInfo[] fiSignature = diInfo.GetFiles("*.htm");

        if (fiSignature.Length > 0)
        {
            StreamReader sr = new StreamReader(fiSignature[0].FullName, Encoding.Default);
            signature = sr.ReadToEnd();

            if (!string.IsNullOrEmpty(signature))
            {
                string fileName = fiSignature[0].Name.Replace(fiSignature[0].Extension, string.Empty);
                signature = signature.Replace(fileName + "_files/", appDataDir + "/" + fileName + "_files/");
            }
        }
    }
        return signature;
}
Run Code Online (Sandbox Code Playgroud)

编辑:请参阅此处以查找 Outlook 2013 的默认签名名称或@ japel在2010此主题中的答案.

  • 此方法的唯一问题是当用户有多个签名保存时.它无法识别默认值.但我现在会买它.谢谢你的帮助.真的很感激.我相信没有别的办法 (3认同)
  • 我通过显示电子邮件然后预先添加到正文来完成此操作.一旦Outlook显示电子邮件,它就会为您提供签名.然后你只需要修改身体.虽然我刚刚找到了这个解决方案,但肯定会仔细研究一下. (2认同)

Tew*_*ewr 15

我有完全相同的问题,但只能使用Interop解决它,因此获得默认签名.

诀窍是调用GetInspector,它会将HTMLBody属性神奇地设置为签名.只需阅读GetInspector属性即可.我用Windows 7/Outlook 2007测试了这个.

对此解决方案的博客文章的信用.


Mar*_*lla 5

我找到了一种非常简单的方法来附加默认的 Outlook 签名(包括图像)。诀窍是在调用 GetInspector 并将您的消息连接到该消息后检索正文消息。

Imports Microsoft.Office.Interop

Dim fdMail As Outlook.MAPIFolder
Dim oMsg As Outlook._MailItem
oMsg = fdMail.Items.Add(Outlook.OlItemType.olMailItem)
Dim olAccounts As Outlook.Accounts
oMsg.SendUsingAccount = olAccounts.Item(1)
oMsg.Subject = "XXX"
oMsg.To = "xxx@xxx.com"
Dim myInspector As Outlook.Inspector = oMsg.GetInspector
Dim text As String
text = "mail text" & oMsg.HTMLBody
oMsg.HTMLBody = text
oMsg.Send()
Run Code Online (Sandbox Code Playgroud)

2021 年 5 月 3 日编辑 请注意,使用内部版本 13530.20440 或更高版本的 Office 365 时,此方法似乎失败。您将收到“抱歉,出了点问题。您可能想再试一次”消息。还在等待修复。