Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 互操作Outlook-从其他邮箱发送约会_C#_Email_Outlook_Interop_Appointment - Fatal编程技术网

C# 互操作Outlook-从其他邮箱发送约会

C# 互操作Outlook-从其他邮箱发送约会,c#,email,outlook,interop,appointment,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 {

我在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);
            }
        }
    }
}
此代码确实成功创建了约会,但它会继续为“”创建约会email1@mail.com“而不是”email2@mail.com,这不应该发生,因为我已将发送帐户指定为email2@mail.com“从字里行间:

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

appt.SendUsingAccount = account;
以下是在Outlook中设置我的两个电子邮件地址的方式:

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

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


谢谢。

不清楚您是在单一邮件配置文件中设置了两个帐户,还是在单独的配置文件中设置了两个帐户

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

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

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

您可能会发现MSDN中的以下文章很有帮助:


您是否在单一邮件配置文件中设置了两个帐户?或者每个帐户都有两个单独的密码?我不太清楚你的意思,也不知道如何检查。如果有帮助的话,这就是我在Outlook中设置两个电子邮件地址的方式:两个电子邮件地址都有不同的用户名,并且来自不同的域/邮件服务器,如该屏幕截图所示。希望对您有所帮助。另外,以下是电子邮件地址在控制面板->邮件(Microsoft Outlook 2013)->电子邮件帐户中的显示方式…:非常感谢。您可以找到所需的存储,然后调用GetDefaultFolder方法来获取特定帐户的日历文件夹。更多信息请参考我的答案。