首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 操作 Lotus Notes 郵件完整指南:COM 互操作實現收發與附件處理

     編輯:關於C#

通過 Lotus Domino Objects COM 組件,.NET 應用可訪問 Domino 服務器/Notes 客戶端對象模型,實現郵件收發、附件處理、用戶列表獲取。需環境安裝 Notes/Domino Designer/Administrator。

引用設置

  1. VS 專案 → Add Reference → COM → Lotus Domino Objects。
  2. using Domino;
  3. 若找不到組件,運行:regsvr32 "C:\Program Files\lotus\notes\nlsxbe.dll"

全局會話與數據庫對象

NotesSession ns;
NotesDatabase ndb; // 用戶郵件數據庫

1. 獲取用戶列表 (通訊錄視圖)


// 遍歷 People 視圖,填充 ComboBox
NotesView view = ndb.GetView("People");
NotesDocument doc = view.GetFirstDocument();
while (doc != null) {
    string fullName = doc.GetItemValue("FullName")[0].ToString();
    cb_People.Items.Add(fullName);
    doc = view.GetNextDocument(doc);
}

2. 發送郵件 (含附件、多收件人)

try {
    if (ns != null) {
        NotesDocument mail = ndb.CreateDocument();
        mail.ReplaceItemValue("Form", "Memo");
        mail.ReplaceItemValue("SendTo", cb_People.Text); // 單收件人
        // 多收件人:
        // string[] receivers = { cb_People.Text, "windie chai/TEST" };
        // mail.ReplaceItemValue("SendTo", receivers);

        mail.ReplaceItemValue("Subject", tb_Subject.Text);

        // 正文 (RichText)
        NotesRichTextItem body = mail.CreateRichTextItem("Body");
        body.AppendText(tb_Body.Text);

        // 附件
        if (!string.IsNullOrEmpty(tb_Attachment.Text)) {
            NotesRichTextItem attachment = mail.CreateRichTextItem("Attachment");
            attachment.EmbedObject(EMBED_TYPE.EMBED_ATTACHMENT, "", tb_Attachment.Text, "attachment");
            // 多附件:再次調用 EmbedObject
        }

        // 發送
        object sendTo = mail.GetItemValue("SendTo");
        mail.Send(false, ref sendTo);
        MessageBox.Show("Successfully!");
    }
} catch (Exception ex) { MessageBox.Show("Error: " + ex.Message); }

3. 讀取收件箱郵件 (含附件提取)

定義郵件實體類:

public class Mail {
    public string Subject { get; set; }
    public string From { get; set; }
    public string Body { get; set; }
    public string Time { get; set; }
    public List<NotesEmbeddedObject> Files { get; set; } = new List<NotesEmbeddedObject>();
}

遍歷 $Inbox 視圖:

List<Mail> mails = new List<Mail>();
NotesDbDirectory dir = ns.GetDbDirectory("DominoT/TEST");
NotesDatabase mailDb = dir.OpenMailDatabase();
NotesView inbox = mailDb.GetView("$Inbox");

NotesDocument doc = inbox.GetFirstDocument();
while (doc != null) {
    Mail m = new Mail {
        Subject = doc.GetItemValue("Subject")[0].ToString(),
        From = doc.GetItemValue("From")[0].ToString(),
        Body = doc.GetItemValue("Body")[0].ToString(),
        Time = doc.GetItemValue("PostedDate")[0].ToString()
    };
    // 提取附件
    foreach (NotesItem item in doc.Items) {
        if (item.Name == "$FILE") {
            string fileName = item.Values[0].ToString();
            NotesEmbeddedObject file = doc.GetAttachment(fileName);
            if (file != null) m.Files.Add(file);
        }
    }
    mails.Add(m);
    lb_Mail.Items.Add(m.Subject); // UI 列表
    doc = inbox.GetNextDocument(doc);
}

4. 顯示郵件詳情與打開附件

// ListBox 選中項顯示
Mail m = mails[lb_Mail.SelectedIndex];
StringBuilder sb = new StringBuilder();
sb.AppendLine(m.Subject).AppendLine("----------")
  .AppendLine(m.Time).AppendLine("----------")
  .AppendLine(m.Body).AppendLine("----------")
  .AppendLine("Attachments:");
foreach (var f in m.Files) sb.AppendLine(f.Name);
tb_Mail.Text = sb.ToString();
btn_OpenAttachment.Enabled = m.Files.Count > 0;

// 打開附件:釋放到臨時路徑並啟動進程
Mail m = mails[lb_Mail.SelectedIndex];
NotesEmbeddedObject file = m.Files[0];
string path = Path.Combine(Application.StartupPath, file.Name);
file.ExtractFile(path);
Process.Start(path);

UI 效果

示例程序界面 Notes中收到郵件

來源:https://www.cnblogs.com/xiaoshatian/archive/2008/06/17/1223439.html

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved