Home : Retrieve and Store Attachments from Messages
Q183232 - HOWTO: Retrieve and Store Attachments from Messages

How to Retrieve and Store Attachments from a Message

The following pieces of code demonstrate how to extract an attachment (either a data file or an embedded message) from the most recent message in a user's Inbox. For more information about Attachment objects, please refer to the Microsoft CDO reference. Before running this code, please configure CDO first.

Retrieving and Storing an Attached Data File:

import com.intrinsyc.cdo.*;
import com.linar.jintegra.Cleaner;
import java.io.*;

public class GetAttachment {
    public static void main(String[] args) {

        //TODO: Change the following parameters based on your setup and configuration
        // the logon parameters of the service account you used to configure CDO
        String domain           = "domain";
        String username         = "username";
        String password         = "password";

        // the DNS name or IP address of the machine where you installed CDO
        String CDOmachine       = "0.0.0.0";

        // the DNS name or IP address of the Exchange Server
        String exchangeServer   = "0.0.0.0";

        // the mailbox you wish to access (NOTE: this is the same as the user's login name
        // e.g., if the username is jsmith, mailbox would also be jsmith )
        String mailbox          = "mailbox";

        try {
            // use credentials of service account to authenticate to Windows
            com.linar.jintegra.AuthInfo.setDefault(domain, username, password);

            // create a Session in the CDOmachine
            Session session = new Session(CDOmachine);

            // logon to the Exchange Server
            session.logon(null, null, new Boolean(false), new Boolean(true),
                          new Boolean(false), new Boolean(false),
                          exchangeServer + "\n" + mailbox);

            // print the current user for this Session
            AddressEntry user = new AddressEntryProxy(session.getCurrentUser());
            System.out.println("Current user: " + user.getName());
   
            // retrieve the inbox folder
            Integer folderType = new Integer(CdoDefaultFolderTypes.CdoDefaultFolderInbox);
            Folder inbox = new FolderProxy(session.getDefaultFolder(folderType));

            // get the message collection from the inbox
            Messages messages = new MessagesProxy(inbox.getMessages());
            Integer count = (Integer)messages.getCount();
            Message message = new MessageProxy(messages.getItem(count));
            String body = message.getText().toString();
            System.out.println("BODY: " + body +"\n");
   
            // process attachment of first message
            Attachments attachments = new AttachmentsProxy(message.getAttachments());   
            if ( ((Integer)attachments.getCount()).intValue() > 0 ) {
                System.out.println("Attachment(s) found!");
                Attachment attachment = new AttachmentProxy(attachments.getItem(new Integer(1)));
   
                String attachmentName = attachment.getName().toString();
                System.out.println("attachmentName: " + attachmentName);
                String writeDirectory = "c:\\GetAttachmentExample\\";  // relative to CDO.dll.
                String fullPath = writeDirectory + attachmentName;
    
                (new File(writeDirectory)).mkdir();
                System.out.println("writeDirectory: " + writeDirectory);    
    
                System.out.println("fullPath: " + fullPath);
                Integer attachmentType = (Integer) attachment.getType();
                System.out.println("attachmentType: " + attachmentType);
                attachment.writeToFile(fullPath);
                System.out.println("success!");
            }   
               
            // log off from the session
            session.logoff();

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // clean up and release all references
            com.linar.jintegra.Cleaner.releaseAll();
        }
    }
}

Before running the above code, please ensure the following:

  1. Note that the specified write path is always relative to the CDO machine (more specifically, CDO.DLL).
  2. Ensure proper access and write privileges are in order (when writing to a non-CDO machine).

Retrieving an Embedded Message:

import com.intrinsyc.cdo.*;
import com.linar.jintegra.Cleaner;
import java.io.*;

public class GetAttachment {
    public static void main(String[] args) {

        //TODO: Change the following parameters based on your setup and configuration
        // the logon parameters of the service account you used to configure CDO
        String domain           = "domain";
        String username         = "username";
        String password         = "password";

        // the DNS name or IP address of the machine where you installed CDO
        String CDOmachine       = "0.0.0.0";

        // the DNS name or IP address of the Exchange Server
        String exchangeServer   = "0.0.0.0";

        // the mailbox you wish to access (NOTE: this is the same as the user's login name
        // e.g., if the username is jsmith, mailbox would also be jsmith )
        String mailbox          = "mailbox";

        try {
            // use credentials of service account to authenticate to Windows
            com.linar.jintegra.AuthInfo.setDefault(domain, username, password);

            // create a Session in the CDOmachine
            Session session = new Session(CDOmachine);

            // logon to the Exchange Server
            session.logon(null, null, new Boolean(false), new Boolean(true),
                          new Boolean(false), new Boolean(false),
                          exchangeServer + "\n" + mailbox);

            // print the current user for this Session
            AddressEntry user = new AddressEntryProxy(session.getCurrentUser());
            System.out.println("Current user: " + user.getName());
   
            // retrieve the inbox folder
            Integer folderType = new Integer(CdoDefaultFolderTypes.CdoDefaultFolderInbox);
            Folder inbox = new FolderProxy(session.getDefaultFolder(folderType));

            // get the message collection from the inbox
            Messages messages = new MessagesProxy(inbox.getMessages());
            Integer count = (Integer)messages.getCount();
            Message message = new MessageProxy(messages.getItem(count));
            String body = message.getText().toString();
            System.out.println("BODY: " + body +"\n");
   
            // process attachment of first message
            Attachments attachments = new AttachmentsProxy(message.getAttachments());   
            if ( ((Integer)attachments.getCount()).intValue() > 0 ) {
                System.out.println("Attachment(s) found!");
                Attachment attachment = new AttachmentProxy(attachments.getItem(new Integer(1)));
   
                String attachmentName = attachment.getName().toString();
                System.out.println("attachmentName: " + attachmentName);
                Integer attachmentType = (Integer) attachment.getType();
                System.out.println("attachmentType: " + attachmentType);

                Message embeddedMsg = new MessageProxy(attachment.zz_getSource());
                String embeddedBody = embeddedMsg.getText().toString();
                System.out.println("Embedded Body:\n" + embeddedBody);
            }   
               
            // log off from the session
            session.logoff();

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            // clean up and release all references
            com.linar.jintegra.Cleaner.releaseAll();
        }
    }
}

Related Articles
No Related Articles Available.

Article Attachments
No Attachments Available.

Related External Links
No Related Links Available.
Help us improve this article...
What did you think of this article?

poor 
1
2
3
4
5
6
7
8
9
10

 excellent
Tell us why you rated the content this way. (optional)
 
Approved Comments...
No user comments available for this article.
Created on 12/21/2006.
Last Modified on 11/1/2007.
Last Modified by J-Integra KB Admin.
Article has been viewed 5886 times.
Rated 4 out of 10 based on 3 votes.
Print Article
Email Article