Извлечение / экспорт вложений из электронной почты Lotus Notes с использованием C # - PullRequest
2 голосов
/ 19 сентября 2009

Мне нужно извлечь / экспортировать вложение электронной почты с примечаниями лотоса в файловую систему. для этого я написал следующий метод, но каждый раз, когда я получаю сообщение об ошибке в строке foreach (NotesItem nItem в элементах) .. Может кто-нибудь сказать мне, что я делаю неправильно ..

Спасибо Jwalin

    public void GetAttachments()
    {
        NotesSession session = new NotesSession();
        //NotesDocument notesDoc = new NotesDocument();
        session.Initialize("");

        NotesDatabase NotesDb = session.GetDatabase("", "C:\\temps\\lotus\\sss11.nsf", false); //Open Notes Database
        NotesView inbox = NotesDb.GetView("By _Author");
        NotesDocument docInbox = inbox.GetFirstDocument();
        object[] items = (object[])docInbox.Items;
        **foreach (NotesItem nItem in items)**
        {

            //NotesItem nItem = (NotesItem)o1;
            if (nItem.Name == "$FILE")
            {
                NotesItem file = docInbox.GetFirstItem("$File");
                string fileName = ((object[])nItem.Values)[0].ToString();
                NotesEmbeddedObject attachfile = (NotesEmbeddedObject)docInbox.GetAttachment(fileName);

                if (attachfile != null)
                {
                    attachfile.ExtractFile("C:\\temps\\export\\" + fileName);
                }
            }
        }

Ответы [ 2 ]

2 голосов
/ 22 сентября 2009

Вам не нужно использовать элемент $ File, чтобы получить имена вложений. Скорее, вы можете использовать свойства HasEmbedded и EmbeddedObject класса NotesDocument.

public void GetAttachments()
    {
    NotesSession session = new NotesSession();
    //NotesDocument notesDoc = new NotesDocument();
    session.Initialize("");

    NotesDatabase NotesDb = session.GetDatabase("", "C:\\temps\\lotus\\sss11.nsf", false); //Open Notes Database
    NotesView inbox = NotesDb.GetView("By _Author");
    NotesDocument docInbox = inbox.GetFirstDocument();

    // Check if any attachments
    if (docInbox.hasEmbedded)
    {
        NotesEmbeddedObject attachfile = (NotesEmbeddedObject)docInbox.embeddedObjects[0];

        if (attachfile != null)
        {
            attachfile.ExtractFile("C:\\temps\\export\\" + attachfile.name);
        }
    }
1 голос
/ 16 февраля 2010

Решение Эда не сработало для меня. Кажется, что-то в моем дизайне БД Notes оставило свойство EmbeddedObjects пустым, даже если флаг HasEmbedded имеет значение true. Поэтому я как бы объединил решения Эда и Джвалина, модифицировав их, чтобы получить все вложения из документа Notes.

        NotesDocument doc = viewItems.GetNthEntry(rowCount).Document;
        if (doc.HasEmbedded)
        {
           object[] items = (object[])doc.Items;
           foreach (NotesItem item in items)
           {
              if(item.Name.Equals("$FILE"))
              {
                 object[] values = (object[])item.Values;
                 doc.GetAttachment(values[0].ToString()).ExtractFile(fileSavePath + values[0].ToString());
              }
           }
...