Reputation: 925
I want to use C# to access my Outlook Sent Folder and move the messages there to a folder in my PST called Archive. This is the code I was working with, but I am getting multiple compile errors. Does someone here with more coding experience know how to accomplish this?
static void MoveMe()
{
try
{
_app = new Microsoft.Office.Interop.Outlook.Application();
_ns = _app.GetNamespace("MAPI");
_ns.Logon(null, null, false, false);
Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderOutbox);
Outlook.Items SentMailItems = SentMail.Items;
Outlook.MailItem newEmail = null;
foreach (object collectionItem in SentMailItems)
{
moveMail.Move(Archive);
}
}
catch (System.Runtime.InteropServices.COMException ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
_ns = null;
_app = null;
_inboxFolder = null;
}
}
Error list from the comments:
Only assignment, call, increment, decrement, and new object expressions can be used as a statement
The type or namespace name 'Emails' could not be found (are you missing a using directive or an assembly reference?)
The name 'A_Sent' does not exist in the current context
The name 'moveMail' does not exist in the current context
The name 'SentMail' does not exist in the current context
Upvotes: 5
Views: 5412
Reputation: 8053
here is an example of how you would get the source folder (SentItems) and move them to a PST(Archive).
using Outlook = Microsoft.Office.Interop.Outlook;
public void MoveMyEmails()
{
//set up variables
Outlook.Application oApp = null;
Outlook.MAPIFolder oSource = null;
Outlook.MAPIFolder oTarget = null;
try
{
//instantiate variables
oApp = new Outlook.Application();
oSource = oApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail);
oTarget = oApp.Session.Folders["Archive"];
//loop through the folders items
for (int i = oSource.Items.Count; i > 0; i--)
{
move the item
oSource.Items[i].Move(oTarget);
}
}
catch (Exception e)
{
//handle exception
}
//release objects
if (oTarget != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(oTarget);
GC.WaitForPendingFinalizers();
GC.Collect();
}
if (oSource != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(oSource);
GC.WaitForPendingFinalizers();
GC.Collect();
}
if (oApp != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(oApp);
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
Upvotes: 10