1
votes

I am trying to access Attachment names form "$File" (Lotus Notes).

 NotesView inbox = _serverDatabase.GetView("($Inbox)");
 NotesDocument docInbox = inbox.GetFirstDocument(); 

 NotesItem file = docInbox.GetFirstItem("$File");

 String fileType = file.type.ToString(); 

( getting fileType value "ATTACHMENT" for mail containing attachments)

I am not getting solution given in:

How to Access attachments from Notes mail?

I got solution as:

object[] items = (object[])docInbox.Items; 

foreach (NotesItem nItem in items)

{

  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:\\test\\" + fileName);
      }
 } 

But here I am getting only first attachment value. Can anyone help me out in this?

2
The "flag for moderator" is for administrative support, not answers to urgent questions.Bill the Lizard

2 Answers

3
votes

Try something like this:

    NotesView inbox = _serverDatabase.GetView("($Inbox)"); 
    NotesDocument docInbox = inbox.GetFirstDocument();  
    if(docInbox.HasEmbedded )   {
       foreach (NotesEmbeddedObject o in docInbox.EmbeddedObjects) {
           if ( o.Type == 1454 ) {
            o.ExtractFile( "c:\samples\" & o.Source )    
    }
   }
}

Here is a link to Lotus Notes Designer Help - Really good as you can search for Classes etc to find out what options you have.

http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=/com.ibm.help.domino.designer85.doc/DOC/H_WHAT_S_NEW_IN_RNEXT_CHAP.html

Show you all the methods and properties of various class.


Hi Preeti,

OK from the other code sample you are returning an array:

string fileName = ((object[])nItem.Values) [0].ToString();

Yet you are only selecting the first value, you need to recurse through the collection.

Try something like this.

foreach (object attachment in (object[])nItem.Values)
        {
            NotesEmbeddedObject attachfile = (NotesEmbeddedObject)docInbox.GetAttachment(attachment.ToString());

            if (attachfile != null)
            {
                attachfile.ExtractFile("C:\\test\\" + attachment.ToString());
            }

        }

Josh

0
votes

Your above code snippet is very helpful to me. So, I tried the to save all attachments and finally found the below solution.

            NotesView nInboxDocs = NDb.GetView("$Inbox");
            NDoc=nInboxDocs.GetFirstDocument();
            while (NDoc != null)
            {
                if (NDoc.HasEmbedded && NDoc.HasItem("$File"))
                {
                    // To save only first attachment //
                    //pAttachment = ((object[])NDoc.GetItemValue("$File"))[0].ToString();
                    //pAttachment = CurItem.ToString();
                    //NDoc.GetAttachment(pAttachment).ExtractFile(@"C:\Documents and Settings\Administrator\Desktop\" + pAttachment);

                    // To save all attachment //
                    object[] AllDocItems = (object[])NDoc.Items;
                    foreach (object CurItem in AllDocItems)
                    {
                        NotesItem nItem = (NotesItem)CurItem;
                        if (IT_TYPE.ATTACHMENT == nItem.type)
                        {
                            pAttachment = ((object[])nItem.Values)[0].ToString();
                            NDoc.GetAttachment(pAttachment).ExtractFile(@"C:\Documents and Settings\Administrator\Desktop\" + pAttachment);
                        }
                    }
                }
                NDoc = nInboxDocs.GetNextDocument(NDoc);
            }