Interop Outlook - 从另一个邮箱发送约会

时间:2015-02-08 23:59:48

标签: c# email outlook interop appointment

我在Outlook中设置了两个邮箱。

我将它们称为" email1@mail.com"和" email2@mail.com"。

我想使用Interop创建并发送约会到特定的电子邮件地址日历,而不仅仅是默认的Outlook帐户。

using System;
using System.Diagnostics;
using System.Reflection;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace Program
{
    class Program
    {
        public static void Main(string[] args)
        {
                // Create the Outlook application.
                Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();

                Outlook.Account account = oApp.Session.Accounts["email2@mail.com"];

                // Get the NameSpace and Logon information.
                Microsoft.Office.Interop.Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

                // Log on by using a dialog box to choose the profile.
                oNS.Logon(Missing.Value, Missing.Value, true, true);

                // Create a new mail item.
                Microsoft.Office.Interop.Outlook.MailItem oMsg =(Microsoft.Office.Interop.Outlook.MailItem) oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);

                // Set the subject.
                oMsg.Subject = "test";

                // Set HTMLBody.
                oMsg.HTMLBody = "test";

                oMsg.To = "test@gmail.com";
                //oMsg.CC = _cc;
                //oMsg.BCC = _bcc;

                oMsg.Save();
                oMsg.SendUsingAccount = account;

                // Add a recipient.
                //Microsoft.Office.Interop.Outlook.Recipients oRecips = (Microsoft.Office.Interop.Outlook.Recipients)oMsg.Recipients;

                // TODO: Change the recipient in the next line if necessary.
                //Microsoft.Office.Interop.Outlook.Recipient oRecip = (Microsoft.Office.Interop.Outlook.Recipient)oRecips.Add(_recipient);
                //oRecip.Resolve();

                // Send.
                (oMsg as Microsoft.Office.Interop.Outlook._MailItem).Send();

                // Log off.
                oNS.Logoff();

                // Clean up.
                //oRecip = null;
                //oRecips = null;
                oMsg = null;
                oNS = null;
                oApp = null;
        }
    }
}

此代码可自动发送电子邮件至" test@gmail.com"来自我的电子邮件" email2@mail.com"。

但是,我想自动为特定的电子邮件地址创建约会/会议。

这是我目前的尝试:

using System;
using System.Diagnostics;
using System.Reflection;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace SendEventToOutlook
{
    class Program
    {
        public static void Main(string[] args)
        {
            try
            {
                // Create the Outlook application.
                Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();

                Outlook.Account account = oApp.Session.Accounts["email2@mail.com"];

                // Get the nameSpace and logon information.
                Microsoft.Office.Interop.Outlook.NameSpace oNS = oApp.GetNamespace("mapi");

                // Log on by using a dialog box to choose the profile.
                oNS.Logon(Missing.Value, Missing.Value, true, true);

                // Create a new Appointment item.
                Microsoft.Office.Interop.Outlook.AppointmentItem appt =
                    (Microsoft.Office.Interop.Outlook.AppointmentItem)
                        oApp.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olAppointmentItem);

                appt.Start = DateTime.Now;
                appt.End = DateTime.Now.AddDays(7);
                appt.Location = "Test";
                appt.Body = "Test";
                appt.AllDayEvent = false;
                appt.Subject = "Test";

                appt.Save();
                appt.SendUsingAccount = account;

                // Log off.
                oNS.Logoff();

                appt = null;
                oNS = null;
                oApp = null;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("The following error occurred: " + ex.Message);
            }
        }
    }
}

此代码确实成功创建了约会,但它一直在为#34; email1@mail.com"创建约会。而不是" email2@mail.com",这不应该发生,因为我已经指定发送帐户是" email2@mail.com"从行:

Outlook.Account account = oApp.Session.Accounts["email2@mail.com"];

然后

appt.SendUsingAccount = account;

这是我在Outlook中设置两个电子邮件地址的方式:http://i.imgur.com/0eopV8A.png

这两个电子邮件地址都有不同的用户名,来自不同的域/邮件服务器,如该屏幕截图所示。

是否有人能够看到我正在制作的问题,或者是否有不同的解决方案?

谢谢。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚您是在单个邮件配置文件中设置了两个帐户还是单独配置文件。

AppointmentItem类的SendUsingAccount属性允许设置一个Account对象,该对象表示要在其下发送AppointmentItem的帐户。因此,SendUsingAccount属性可用于指定在调用Send方法时应用于发送AppointmentItem的帐户。我认为这不是你想要的。

无论如何,您可以使用Store类的GetDefaultFolder方法,该方法返回一个Folder对象,该对象表示存储中的默认文件夹,并且是FolderType参数指定的类型。此方法类似于NameSpace对象的GetDefaultFolder方法。区别在于此方法获取与该帐户关联的传递存储上的默认文件夹,而NameSpace.GetDefaultFolder返回当前配置文件的默认存储上的默认文件夹。

因此,您可以获取所需帐户的日历文件夹,并在那里添加新约会。

您可能会在MSDN中找到以下文章: