zoukankan      html  css  js  c++  java
  • Outlook 开发2

    转自:http://www.cnblogs.com/madebychina/archive/2011/09/20/madebychina_2.html

    C#使用如下代码调用Outlook2003发送邮件:

      

    // Create the Outlook application.
                    Outlook.Application  oApp = new Outlook.Application();
                    //Outlook.ApplicationClass  oApp = new Outlook.ApplicationClass();
    
                    // Get the NameSpace and Logon information.
                    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); 
    
                    // Alternate logon method that uses a specific profile.
                    // TODO: If you use this logon method, 
                    //  change the profile name to an appropriate value.
                    //oNS.Logon("YourValidProfile", Missing.Value, false, true); 
                
                    // Create a new mail item.
                    Outlook.MailItem oMsg = (Outlook.MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
    
                    // Set the subject.
                    oMsg.Subject = "mail";
                    //oMsg.Attachments.Add("C:\mailLog.txt", Outlook.OlItemType.olMailItem, 1, "report");
    
                    // Set HTMLBody.
                    String sHtml;
                    sHtml = "<HTML>
    " + 
                        "<HEAD>
    " +
                        "<TITLE>Sample GIF</TITLE>
    " +
                        "</HEAD>
    " +
                        "<BODY><P>
    " + 
                        "<h1><Font Color=Green>Inline graphics</Font></h1></P>
    " +
                        "</BODY>
    " + 
                        "</HTML>";
                    oMsg.HTMLBody = sHtml;
    
                    // Add a recipient.
                    Outlook.Recipients oRecips = (Outlook.Recipients)oMsg.Recipients;
                    // TODO: Change the recipient in the next line if necessary.
                    string reciMailAdress=this.txtMail.Text;
                    Outlook.Recipient oRecip = (Outlook.Recipient)oRecips.Add(reciMailAdress);
                    oRecip.Resolve();
    
                    // Send.
                    oMsg.Send();
                    //((Microsoft.Office.Interop.Outlook._MailItem)oMsg).Send();
    
                    // Log off.
                    oNS.Logoff();
    
                    // Clean up.
                    oRecip = null;
                    oRecips = null;
                    oMsg = null;
                    oNS = null;
                    oApp = null;
    

      

      但是因为Outlook2003的安全机制,总是会弹出安全提示对话框,如下:

      而且在我们选择允许访问,点击“是”按钮后还会弹出另外一个对话框,如下:

      并且“是”按钮还会被冻结5秒钟。分析原因是我们使用的是Outlook.MailItem邮件模式,这是一种非安全的模式,所以在第三方程序调用Outlook2003时会弹出确认对话框,如何来避免弹出安全提示对话框呢?我们可以使用SafeMailItem模式。但是在使用这种模式时需要引用Redemption.dll,而且还要安装Redemption插件,代码如下:

    private void Send()
            {
                Outlook.Application olApp = new Outlook.ApplicationClass();
                Outlook.NameSpace olNS = olApp.GetNamespace("MAPI");
                olNS.Logon(Missing.Value, Missing.Value, false, false);
                SafeMailItem sItem = new Redemption.SafeMailItem();
    
                Outlook.MailItem olItem = olApp.CreateItem(0) as Outlook.MailItem;
    
                String sHtml;
                sHtml = "<HTML>
    " + 
                    "<HEAD>
    " +
                    "<TITLE>Sample GIF</TITLE>
    " +
                    "</HEAD>
    " +
                    "<BODY><P>
    " + 
                    "<h1><Font Color=Green>Inline graphics</Font></h1></P>
    " +
                    "</BODY>
    " + 
                    "</HTML>";
                olItem.HTMLBody = sHtml;
    
                sItem.Item = olItem;
    
                string reciMailAdress=txtMail.Text;
                sItem.Recipients.Add(reciMailAdress);
                sItem.Recipients.ResolveAll();
                SetPropValue(sItem, "Subject", "Testing Redemption");
                sItem.Send();
            }
    
            private static object GetPropValue(object item, string propertyName)
            {
    
                try
                {
                    object[] args = new Object[]{}; // dummy argument array
                    Type type = item.GetType();
                    return type.InvokeMember(
                        propertyName,
                        BindingFlags.Public | BindingFlags.GetField
                        | BindingFlags.GetProperty,
                        null,
                        item,
                        args);
                }
                catch (SystemException ex)
                {
                    //                Console.WriteLine(
                    //                    string.Format(
                    //                    "GetPropValue for {0} Exception: {1} ",
                    //                    propertyName, ex.Message));
                }
                return null;
            }
            private static void SetPropValue(object item, string propertyName,object propertyValue)
            {
                try
                {
                    object[] args = new Object[1];
                    args[0] = propertyValue;
                    Type type = item.GetType();
                    type.InvokeMember(propertyName,
                        BindingFlags.Public | BindingFlags.SetField |
                        BindingFlags.SetProperty,
                        null,
                        item,
                        args);
                }
                catch (SystemException ex)
                {
                    //                Console.WriteLine(
                    //                    string.Format(
                    //                    "SetPropValue for {0} Exception: {1} ",
                    //                    propertyName, ex.Message));
                }
                return;
            }
    

      

      这样就能避免弹出对话框了,其他高版本的Outlook好像没有此问题,Outlook2007在开启反病毒软件时不会弹出对话框。

      Redemption下载地址:http://www.dimastr.com/redemption/download.htm

      本文参考资料地址:http://www.outlookcode.com/article.aspx?id=52

               http://www.dotnet247.com/247reference/message.aspx?id=92601

  • 相关阅读:
    jquery ui draggable,droppable 学习总结
    VSCode设置网页代码实时预览
    ionic3-修改APP应用图标(icon)和APP启动界面(Splash)
    Ionic3页面的生命周期
    videogular2 在ionic3项目里报错(rxjs_1.fromEvent is not a function)
    IDEA的maven项目的netty包的导入(其他jar同)
    maven的安装与项目的创建
    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    使用二分法查询二维整型数组的值(找到返回其坐标)
    乐观锁以及悲观锁
  • 原文地址:https://www.cnblogs.com/ifreesoft/p/3573127.html
Copyright © 2011-2022 走看看