网络上讲的C#调用Outlook界面发送邮件的例子举不胜数,但都是将调出简单的界面,设置收件人地址、邮件标题、正文内容等,但对于发送指定附件的说明非常少。也有实现的,却是采用引入Outlook对象库,我不想只为了如此一个小功能去引入那么大个东东,太恶心!刚好也想给CrossFile2.0加入这个小功能,于是乎昨晚仔细研究了下Outlook的调用参数,发现还是可以用简单的方式实现的,现贴出分享如下: 
  Microsoft.Win32.RegistryKey rKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(@"mailto\shell\open\command");//这里我们查找系统的缺省邮件客户程序,其他的客户程序我没有试验过,不知道这种方式是否可行     if(rKey != null) 
   {//这里查找Outlook应用程序所在位置,也可以用其他方式去查 
    string path = rKey.Getvalue("").ToString() + " "; 
    path = path.Substring(0, path.IndexOf(" ")); 
    path = path.Replace("\"", ""); 
    rKey.Close(); 
    try 
   { 
         System.Diagnostics.Process.Start(path, "-c IPM.Note /m [email protected]&subject=Hello " + this._imagePath);//调用执行Outlook,主要注意后面的参数,附件的文件地址空格隔开 
   } 
   catch 
  { 
  } 
}

解决方案 »

  1.   

    To lijun84:    我试过了您的代码,去掉this._imagePath之前编译不通过,因为我没有_imagePath这个变量,不知道这个是什么意思?去掉以后,运行程序,弹出了一个outlook新建邮件的窗口,subject:hello,收件人:[email protected]。可是我怎样才能让程序自动地发邮件呢?也就是说,跑起来以后就不用人来管了。谢谢!
      

  2.   

    MSDN中资料关于Outlook调用前要先和Exchange建立信任,如果是弹出身份信息输框的话,估计是由于未建立Trust
      

  3.   

    不知如何先跟Exchange建立信任?
      

  4.   

    现在没有时间做一个例子了,看看outlook的帮助文档,再加上MSDN Library两件法宝就可能搞定了。
    有时间给大家弄个例子了。
      

  5.   

    iceying ()
    我的问题搞定了,过程是这样的:
    我卡住时用的是Outlook 2003,现在用的是2000,查资料说这种安全机制好象是2003和xp上新加的,用2000后就没有再跳出对话框了,不晓得你用的是否Outlook 2003或xp?试一下吧.