• net4.5 outlook 插件开发


    需求  做到企业邮箱和outlook自动或者手动同步,同步日历和通讯录。

    手动设置登录 

    程序运行是创建2个自定义文件夹 一个日历和一个通讯录。并且在每次保存后触发事件

       private void ThisAddIn_Startup(object sender, System.EventArgs e)
            {
    
                _iCreatePesrsonCalendar = new CreatePesrsonCalendar();
                _ICalenda = new CreatePesrsonCalendar();
                _IContacts = new ContactServeice();
                _httpInvoke = new HttpInvoke();
                CreateCustomCalendars();
                CreateContacts();
                #region 自动登录
                LoginInfo loginInfo = LoginInfo.CreateInstance();
                loginInfo.AccountID = Settings.Default.UserID.Trim();
                loginInfo.AccountPassWord = Settings.Default.Pwd; // _httpInvoke.MD5( this.txt_pwd.Text.Trim());
                loginInfo.AccountLoginTime = Common.GetTimeStamp();
                loginInfo.ASecretkey = _httpInvoke.CreateASecretkey(loginInfo);
                string b = _httpInvoke.Login(loginInfo);
                _httpInvoke.Writelog($"{loginInfo.AccountID}结果:b{b}");
                #endregion
                inspectors = this.Application.Inspectors;
                inspectors.NewInspector +=
                new Microsoft.Office.Interop.Outlook.InspectorsEvents_NewInspectorEventHandler(Inspectors_NewInspector);
                #region 日历触发条件
                {
                    Outlook.MAPIFolder primaryCalendar = (Outlook.MAPIFolder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
                    foreach (Outlook.Folder personalCalendar in primaryCalendar.Folders)
                    {
                        var name = personalCalendar.Name.ToString();
                        if (name == ConstKey.foderKey)
                        {
                            personalCalendar_items = personalCalendar.Items;
                            personalCalendar_items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ItemsEvents_ItemAddCalendar);
                        }
                    }
                }
                #endregion
                #region 通讯录触发条件
                {
                    Outlook.MAPIFolder primaryContacts = (Outlook.MAPIFolder)this.Application.ActiveExplorer().Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderContacts);
                    foreach (Outlook.Folder personalContacts in primaryContacts.Folders)
                    {
                        var name = personalContacts.Name.ToString();
                        if (name == ConstKey.foderContactsKey)
                        {
                            personalContactsr_items = personalContacts.Items;
                            personalContactsr_items.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ItemsEvents_ItemAddContacts);
                        }
                        
                    }
                }
                #endregion
    
                #region 初始化系统自带的日历能触发
                {
                    //_MyAppointmentsFolder = (Outlook.Folder)this.Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderCalendar);
                    //_Appointments = _MyAppointmentsFolder.Items;
                    //_Appointments.ItemAdd += new Outlook.ItemsEvents_ItemAddEventHandler(ItemsEvents_ItemAdd);
    
                }
                #endregion
    
    
            }

      回调方法如下

          /// 日历回调
          /// </summary>
          /// <param name="Item"></param>
        public    void ItemsEvents_ItemAddCalendar(object Item)
            {
                //InboxFolderItemAdded invoked by thread
    
                LoginInfo loginInfo = LoginInfo.CreateInstance();
                if (loginInfo.Aresult)
                {
                    Console.WriteLine("自动同步*************之前先检查自己的日历数据********************日历");
    
                    #region  setp1 先检查outlook 本地的日历数据
                    var outlooklists = _iCreatePesrsonCalendar.GetCalendalFolder(ConstKey.foderKey);
                    #endregion
    
                    outlooklists.Except(outlooklists);///交叉并补
    
                    #region  setp 2 webapi 的数据
    
    
                    #endregion
    
    
                    #region setp3 开始同步
    
                    PersonalCalendarInfro p = new PersonalCalendarInfro()
                    {
                        start = DateTime.Now.AddMinutes(2),
                        end = DateTime.Now.AddMinutes(2.25),
                        description = "测试数据描述1111",
                        title = "标题1111",
                        location = "上海黄埔111111"
                    };
                    _iCreatePesrsonCalendar.SaveFolder(ConstKey.foderKey, p);
                    #endregion
    
    
                }
    
    
    
            }
           /// <summary>
           /// 通讯录回调
           /// </summary>
           /// <param name="Item"></param>
            public void ItemsEvents_ItemAddContacts(object Item)
            {
                //InboxFolderItemAdded invoked by thread
                LoginInfo loginInfo = LoginInfo.CreateInstance();
                if (loginInfo.Aresult)
                {
    
                    Console.WriteLine("自动同步*************之前先检查自己的通讯录数据********************通讯录");
    
                    Console.WriteLine("2222");
                }
            }
  • 相关阅读:
    windows线程消息通信和处理 PostThreadMessage和PeekMessage GetMessage
    如何:对 Windows 窗体控件进行线程安全调用(转载自msdn)
    How to: Develop a Simple Windows Forms Control(转载)
    《Effective C#》 翻译札记(转载)
    对制造者线程和使用者线程进行同步
    用户模式与内核模式(转)
    焊接技巧
    TextBox控件滚动条自动下拉(转)
    books
    CODE::BLOCKS GLUT 完整开发包
  • 原文地址:https://www.cnblogs.com/jasontarry/p/15953701.html
Copyright © 2020-2023  润新知