Lotus Domino:如何使用Domino.dll将部门的签名添加到通过C#发送的电子邮件中

时间:2013-01-11 14:27:29

标签: c# lotus-notes lotus-domino

我正在编写一个程序,我可以从三个不同的部门邮箱(每个使用自己的邮件服务器和nsf文件)发送邮件(使用domino.dll)。 所有三个部门邮箱都有预定义的邮件签名,例如

此致 X部门

由于这些可以随时更改,我不想在我的程序中对签名进行硬编码,而是从邮箱/ nsf文件中提取它们并将其附加到邮件正文(如果有更好的方法,则将其附加到其他内容)

我一整天都没有找到解决这个问题的方法,所以我的问题是:这是如何实现的?

到目前为止,我的代码与此类似:

public Boolean sendNotesMail(String messageText)
    {
        //Create new notes session 
        NotesSession _notesSession = new NotesSession();
        //Initialize Notes Database to null; 
        NotesDatabase _notesDataBase = null;
        //Initialize Notes Document to null; 
        NotesDocument _notesDocument = null;

        string mailServer = @"Path/DDB";
        string mailFile = @"Deparmentmail\number.nsf";

        //required for send, since its byRef and not byVal, gets set later. 
        object oItemValue = null;

        // Start the connection to Notes. Otherwise log the error and return false
        try
        {
            //Initialize Notes Session 
            _notesSession.Initialize("");
        }
        catch
        {
           //Log
        }

        // Set database from the mailServer and mailFile
        _notesDataBase = _notesSession.GetDatabase(mailServer, mailFile, false);

        //If the database is not already open then open it. 
        if (!_notesDataBase.IsOpen)
        {
            _notesDataBase.Open();
        }

        //Create the notes document 
        _notesDocument = _notesDataBase.CreateDocument();

        //Set document type 
        _notesDocument.ReplaceItemValue("Form", "Memo");

        //sent notes memo fields (To and Subject) 
        _notesDocument.ReplaceItemValue("SendTo", emailAddress);
        _notesDocument.ReplaceItemValue("Subject", subjectText);
        // Needed in order to send from a departmental mailbox
        _notesDocument.ReplaceItemValue("Principal", _notesDataBase.Title);

        //Set the body of the email. This allows you to use the appendtext 
        NotesRichTextItem _richTextItem = _notesDocument.CreateRichTextItem("Body");

        // Insert the text to the body 
        _richTextItem.AppendText(messageText);
        try
        {
            _notesDocument.Send(false, ref oItemValue);
        }

}

编辑: 感谢Richard Schwartz,我的解决方案是:

object signature = _notesDataBase.GetProfileDocument("calendarprofile", "").GetItemValue("Signature");
String[] stringArray = ((IEnumerable)signature).Cast<object>().Select(x => x.ToString()).ToArray();
_richTextItem.AppendText(stringArray[0]);

2 个答案:

答案 0 :(得分:3)

签名存储在NSF文件的配置文件中。您可以使用方法NotesDatabase.getProfileDocument()来访问它。此方法有两个参数:

ProfileName:查找签名所需的配置文件名称是“calendarprofile”。 (是的,这是正确的。它实际上是许多功能的常见配置文件,但是日历开发人员首先到达那里并命名它。; - ))

UniqueKey:将其保留为空字符串。 (它传统上用于在共享数据库中的配置文件中存储用户名,但不在邮件文件的calendarprofile文档中使用。)

您访问配置文件中的数据的方式与在常规文档中访问数据的方式相同,例如,使用getItem(),getItemValue()等。对于简单的文本签名,您要查找的NotesItem称为“签名”。但是,我注意到还有一些名为“Signature_1”和“Signature_2”以及“SignatureOption”的项目。

如果您查看在Notes邮件中设置签名的首选项UI,您将看到可以在简单文本和HTML或图形文件之间进行选择。毫无疑问,这个选择将反映在SignatureOption项目中,因此您可能希望先检查它。如果您使用导入的HTML或图形文件,我还没有探究数据的位置,因此我无法确定它是进入Signature,Signature_1,Signature_2还是其他任何地方。但您可以使用NotesPeek自行探索。您可以下载here。它呈现了NSF文件的树形视图。 Profiles的树有一个分支,你可以在那里找到calendarprofile。然后,只需在Notes邮件首选项中使用不同的设置,并查看更改。 (NotesPeek不会动态获取更改。您必须在Notes邮件首选项对话框中保存更改后关闭并重新打开NotesPeek中的配置文件才能查看更改。)

答案 1 :(得分:0)

如果这太难了,并且您想要所有邮件的标准解决方案,您可以考虑this product或类似邮件。