转自: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>\n"+ "<HEAD>\n"+ "<TITLE>Sample GIF</TITLE>\n"+ "</HEAD>\n"+ "<BODY><P>\n"+ "<h1><Font Color=Green>Inline graphics</Font></h1></P>\n"+ "</BODY>\n"+ "</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插件,代码如下:

 1       privatevoid 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() as Outlook.MailItem;               String sHtml;              sHtml ="<HTML>\n"+ "<HEAD>\n"+ "<TITLE>Sample GIF</TITLE>\n"+ "</HEAD>\n"+ "<BODY><P>\n"+ "<h1><Font Color=Green>Inline graphics</Font></h1></P>\n"+ "</BODY>\n"+ "</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();          }   privatestaticobject 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));             }  returnnull;          }  privatestaticvoid SetPropValue(object item, string propertyName,object propertyValue)          {  try             {  object[] args =new Object[];                  args[] = 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

Outlook 开发的更多相关文章

  1. Outlook 开发2

    转自:http://www.cnblogs.com/madebychina/archive/2011/09/20/madebychina_2.html C#使用如下代码调用Outlook2003发送邮 ...

  2. VSTO:使用C#开发Excel、Word【10】

    第二部分:.NET中的Office编程本书前两章介绍了Office对象模型和Office PIA. 您还看到如何使用Visual Studio使用VSTO的功能构建文档中的控制台应用程序,加载项和代码 ...

  3. outlook2013插件 VSTO开发与部署

    一.背景 最近因为项目需要对outlook开发一个插件,功能是将outlook的邮件作导出功能,需要使用VSTO开发一个插件将邮件进行导出的操作.于是,开始学习VSTO outlook的开发了,折腾了 ...

  4. outlook 插件:导出rss的link地址

    由于对于rss的应用程序不熟悉,所以使用Outlook接收rss.使用过程和平时收邮件没有什么差别. 唯一的遗憾是鉴于安全考虑,outlook没有全部下载网页,所以每次都要打开浏览器.有时候遇到一些需 ...

  5. 如何使用.NET开发全版本支持的Outlook插件产品(四)——进阶探讨

    插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 如何定制Ribbon在不同界面的显示 实际使用过程中出现的问题 这个问题的来自十分 ...

  6. 如何使用.NET开发全版本支持的Outlook插件产品(三)——全面控制

    插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 进阶基础--COM查看 首先,对于Outlook对象模型,MSDN早就有非常详细的 ...

  7. 如何使用.NET开发全版本支持的Outlook插件产品(二)——完善插件

    插件项目所有代码都已经上传至 https://github.com/VanPan/TestOutlookAdding 勿在浮砂筑高台--定位错误 在介绍后面的插件开发技术之前,让我们先来看看已经达到的 ...

  8. 如何使用.NET开发全版本支持的Outlook插件产品(一)——准备工作

    这半年一直在做Outlook的插件,因为不会VC++,所以想找一款基于.NET,用C#开发Outlook插件的技术方案.没想到,光技术选型这件事,就用各种技术手段验证了将近一个月,还花费了大量的精力做 ...

  9. 我的VSTO之路(五):Outlook初步开发之联系人扩展

    原文:我的VSTO之路(五):Outlook初步开发之联系人扩展 上一讲我们完成对Word的介绍,文本开始,我将着重介绍Outlook.Outlook是微软Office中一个非常实用的工具,尤其在一个 ...

随机推荐

  1. eclipse下Android工程名称的修改方法

    eclipse下Android工程名称的修改方法 对于已经建立的工程,如果发现原来的工程名不合适,此时若想彻底更改工程名,需要三个步骤: 1.更改工程名 选中工程名,右键-->Refactor- ...

  2. iOS 移动开发周报

    iOS 移动开发周报   前言 是的,我又开始写周报了!主要是因为喵神不写周报了,加上我发现大家对写 iOS 技术周报这件事情似乎没什么兴趣.其实我觉得这是一个挺好的学习总结的办法,所以要不就继续我来 ...

  3. Centos7安装配置ansible运维自动化工具

    准备至少两台机器 Centos7,这两台机器都关闭 selinux IP:106.13.118.132 服务端(ansible) masterIP:148.70.60.244 节点 slaver 服务 ...

  4. Android 调用QQ登录

    调用QQ登录        在如今的项目开发.调用第三方登录.差点儿是必须的,而调用QQ登录也是不可缺少的,这里把相关代码分享出来,希望能拿去就能够用,降低项目开发的时间.希望对大家实用. 1,去QQ ...

  5. iOS开发教程:Storyboard全解析-第一部分

    本文转载至http://blog.csdn.net/chang6520/article/details/7945845 感谢原文作者分享     故事版(Storyboard)是一个能够节省你很多设计 ...

  6. php 面向对象的三大要素(封装、继承、多态)以及重写(override)和重载(overload)的举例说明

    PHP是一种HTML内嵌式的,用来制作动态网页的服务器端的脚本语言.其特点是:开发周期短,稳定安全,简单易学,免费开源,良好的跨平台特性.PHP是一种面向对象的程序设计语言,目前已成为全球最受欢迎的五 ...

  7. OBS桌面视频直播软件/推流工具使用指南

    OBS 操作指南 什么是OBS? Open Broadcaster Software 是一款好用的互联网流媒体直播内容输入作软件. OBS使用是否收费? 不收费,这个程序和它的源代码都是免费的. OB ...

  8. EasyRTMP实现对接海康、大华等IPCamera SDK进行RTMP推送直播功能

    本文转自EasyDarwin团队Kim的博客:http://blog.csdn.net/jinlong0603 Demo项目介绍 EasyRTMP Demo代码下载地址https://github.c ...

  9. Python pandas 获取Excel重复记录

    pip install pandas pip install xlrd 大量记录的时候,用EXCEL排序处理比较费劲,EXCEL程序动不动就无响应了,用pands完美解决. # We will use ...

  10. 怎样把word直接转换成ppt