How to log into my mailbox on Exchange

D

Derick Swart

Hi there,

Can someone kindly assist me with a code sample or link showing how to log
into and get to mailitems on an Exchange server? We run AD as well.

Regards,
Derick
 
K

Ken Slovak - [MVP - Outlook]

Using what language and API?

Where is the code running, is Outlook installed or is this a machine where
Outlook isn't installed?

This is your own mailbox?

What version of Outlook if Outlook is installed?
 
D

Derick Swart

Thanks Ken. Sorry for the poor formulation.

I am working with Outlook 2007 items via an intranet application (Asp.NET
3.5). I have read Microsoft's cautionery notes.

On my own machine it works fine (snippet below), but when deployed to the
server it is obviously not going to work as is currently the case. I would
have to log onto Exchange, I suppose?

(Outlook is not installed on the Exchange box - our platform people tell me
this is not possible).

Thank you for your time.

Regards,
Derick

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MailItem item = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;

try
{
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);

inboxFolder =
ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
subFolder = inboxFolder.Folders["Persoonlik"];
//folder.Folders[1]; also works
Response.Write("Folder Name: " + subFolder.Name + " EntryId" +
subFolder.EntryID);
Response.Write("Num Items: " +
subFolder.Items.Count.ToString());

for (int i = 1; i <= 6; i++) //i <= subFolder.Items.Count
{
item =
(Microsoft.Office.Interop.Outlook.MailItem)subFolder.Items;
Response.Write("Item: " + i.ToString());
Response.Write("Subject: " + item.Subject);
Response.Write("Sent: " + item.SentOn.ToLongDateString() +
"," + item.SentOn.ToLongTimeString());
Response.Write("Categories: " + item.Categories);
Response.Write("Body: " + item.Body);
Response.Write("HTMLBody: " + item.HTMLBody);
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
Response.Write(ex.ToString());
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
}
}
 
K

Ken Slovak - [MVP - Outlook]

You never want to install Outlook on an Exchange box, it's a real good way
to mess up both.

Running on a server, Outlook code really isn't a good idea. First you have
to have Outlook installed there. Second, the Outlook code there has to run
in a different context than it would on a client, so you need to have
permissions and profiles set up for every mailbox you want to log into, or
you need the profile on the server to have permissions to log into all the
relevant mailboxes and use the NameSpace.GetSharedDefaultFolder() method to
access the alternate mailboxes.

If you use different profiles the code must log into Outlook, prompt for
profile to use, do its work, then exit Outlook and log into another mailbox.

Using GetSharedDefaultFolder() allows you do one Outlook logon using the
existing Outlook profile there and then use the method to access default
folders in those other mailboxes.




Derick Swart said:
Thanks Ken. Sorry for the poor formulation.

I am working with Outlook 2007 items via an intranet application (Asp.NET
3.5). I have read Microsoft's cautionery notes.

On my own machine it works fine (snippet below), but when deployed to the
server it is obviously not going to work as is currently the case. I
would have to log onto Exchange, I suppose?

(Outlook is not installed on the Exchange box - our platform people tell
me this is not possible).

Thank you for your time.

Regards,
Derick

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MailItem item = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;

try
{
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);

inboxFolder =
ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
subFolder = inboxFolder.Folders["Persoonlik"];
//folder.Folders[1]; also works
Response.Write("Folder Name: " + subFolder.Name + " EntryId" +
subFolder.EntryID);
Response.Write("Num Items: " +
subFolder.Items.Count.ToString());

for (int i = 1; i <= 6; i++) //i <= subFolder.Items.Count
{
item =
(Microsoft.Office.Interop.Outlook.MailItem)subFolder.Items;
Response.Write("Item: " + i.ToString());
Response.Write("Subject: " + item.Subject);
Response.Write("Sent: " + item.SentOn.ToLongDateString() +
"," + item.SentOn.ToLongTimeString());
Response.Write("Categories: " + item.Categories);
Response.Write("Body: " + item.Body);
Response.Write("HTMLBody: " + item.HTMLBody);
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
Response.Write(ex.ToString());
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
}
}
 
D

Derick Swart

Dear Ken,

Thank you for the advice.

Sorry if I am slow, but essentially you are saying that the
GetSharedDefaultFolder() method is the best way to achieve this, but not
running on the same box as Exchange?

Regards,
Derick

Ken Slovak - said:
You never want to install Outlook on an Exchange box, it's a real good way
to mess up both.

Running on a server, Outlook code really isn't a good idea. First you have
to have Outlook installed there. Second, the Outlook code there has to run
in a different context than it would on a client, so you need to have
permissions and profiles set up for every mailbox you want to log into, or
you need the profile on the server to have permissions to log into all the
relevant mailboxes and use the NameSpace.GetSharedDefaultFolder() method
to access the alternate mailboxes.

If you use different profiles the code must log into Outlook, prompt for
profile to use, do its work, then exit Outlook and log into another
mailbox.

Using GetSharedDefaultFolder() allows you do one Outlook logon using the
existing Outlook profile there and then use the method to access default
folders in those other mailboxes.




Derick Swart said:
Thanks Ken. Sorry for the poor formulation.

I am working with Outlook 2007 items via an intranet application (Asp.NET
3.5). I have read Microsoft's cautionery notes.

On my own machine it works fine (snippet below), but when deployed to the
server it is obviously not going to work as is currently the case. I
would have to log onto Exchange, I suppose?

(Outlook is not installed on the Exchange box - our platform people tell
me this is not possible).

Thank you for your time.

Regards,
Derick

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Microsoft.Office.Interop.Outlook.Application app = null;
Microsoft.Office.Interop.Outlook._NameSpace ns = null;
Microsoft.Office.Interop.Outlook.MailItem item = null;
Microsoft.Office.Interop.Outlook.MAPIFolder inboxFolder = null;
Microsoft.Office.Interop.Outlook.MAPIFolder subFolder = null;

try
{
app = new Microsoft.Office.Interop.Outlook.Application();
ns = app.GetNamespace("MAPI");
ns.Logon(null, null, false, false);

inboxFolder =
ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);
subFolder = inboxFolder.Folders["Persoonlik"];
//folder.Folders[1]; also works
Response.Write("Folder Name: " + subFolder.Name + " EntryId" +
subFolder.EntryID);
Response.Write("Num Items: " +
subFolder.Items.Count.ToString());

for (int i = 1; i <= 6; i++) //i <= subFolder.Items.Count
{
item =
(Microsoft.Office.Interop.Outlook.MailItem)subFolder.Items;
Response.Write("Item: " + i.ToString());
Response.Write("Subject: " + item.Subject);
Response.Write("Sent: " + item.SentOn.ToLongDateString() +
"," + item.SentOn.ToLongTimeString());
Response.Write("Categories: " + item.Categories);
Response.Write("Body: " + item.Body);
Response.Write("HTMLBody: " + item.HTMLBody);
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
Response.Write(ex.ToString());
}
finally
{
ns = null;
app = null;
inboxFolder = null;
}
}
}

 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top