The following sample code shows how to send emails from Outlook and Exchange using C#. This code works with any version of Outlook because it uses Late Binding to automate Outlook. Parts of the code where taken from other websites.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Threading;
namespace LateBindingTest
{
class OutlookEmailerLateBinding
{
private object oApp;
private object oNameSpace;
private object oOutboxFolder;
public OutlookEmailerLateBinding()
{
Type outlook_app_type;
object[] parameter = new object[1];
//Get the excel object
outlook_app_type = Type.GetTypeFromProgID("Outlook.Application");
//Create instance of excel
oApp = Activator.CreateInstance(outlook_app_type);
//Set the parameter which u want to set
parameter[0] = "MAPI";
//Set the Visible property
oNameSpace = outlook_app_type.InvokeMember("GetNamespace",
BindingFlags.InvokeMethod, null, oApp, parameter);
var Logon_parameter = new object[4] { null, null, true, true };
oNameSpace.GetType().InvokeMember("Logon",
BindingFlags.InvokeMethod, null, oNameSpace, Logon_parameter);
var GetDefaultFolder_parameter = new object[1] { 6 };
oOutboxFolder =
oNameSpace.GetType().InvokeMember("GetDefaultFolder",
BindingFlags.InvokeMethod, null, oNameSpace,
GetDefaultFolder_parameter);
Console.WriteLine("Press enter to exit");
}
static void Main(string[] args)
{
//Variable
try
{
OutlookEmailerLateBinding app = new OutlookEmailerLateBinding();
app.SendOutlookEmail("yourname@gmail.com", "Test 1 2
3", "Test message. Testing.");
}
catch (Exception e)
{
Console.WriteLine("Error Stack {0} ", e.Message);
}
Console.ReadLine();
}
public void SendOutlookEmail(string toValue, string
subjectValue, string bodyValue)
{
var CreateItem_parameter = new object[1] { 0 };
object oMailItem =
oApp.GetType().InvokeMember("CreateItem", BindingFlags.InvokeMethod,
null, oApp, CreateItem_parameter);
var mail_item_type = oMailItem.GetType();
mail_item_type.InvokeMember("To",
BindingFlags.SetProperty, null, oMailItem, new
object[] { toValue });
mail_item_type.InvokeMember("Subject",
BindingFlags.SetProperty, null, oMailItem, new
object[] { subjectValue });
mail_item_type.InvokeMember("Body",
BindingFlags.SetProperty, null, oMailItem, new
object[] { bodyValue });
mail_item_type.InvokeMember("Send",
BindingFlags.InvokeMethod, null, oMailItem, null);
}
}
}
4 comments:
How to send email to more than one receivers? When I use this code, I got the error message saying: "Outlook does not recognize one or more names. "
I think you have to use the Add of the Recipients property in the MailItem object. You can google those and just use the same convention I used in the post to call late binding objects. Another option you can try is the dynamic keyword in c#4.0 with it you can do late binding but without all the reflection cluttering. You can google the dynamic keyword in c# to learn how it works. Thanks!
code work...but I am getting a security popup , try this in a asp.net webapp....how to bypass the security popup???worthe ricatin
@happy : I don't think there is a way of bypassing that. You mentioned asp.net, are you using this in a server? Microsoft and most people don't recommend using Office Automation (which COM late binding is) for web or other server side applications. Automation is intended for only desktop apps.
Post a Comment