C# 获得;“操作中止”;在c中使用SaveAS方法从outlook保存邮件项目时#

C# 获得;“操作中止”;在c中使用SaveAS方法从outlook保存邮件项目时#,c#,outlook,C#,Outlook,在这里,我想将邮件项目转换为PDF,因此在第一步中,我将尝试根据主题行获取邮件项目,并将其保存为outlook支持的任何文件格式。但我做不到。有人能帮忙吗 提前感谢切勿创建空的捕捉块。这是一个非常好的引入bug的方法。你有没有仔细检查过你的代码,以确保它真的在你认为它要去的地方?一切看起来都很好,我可以从所有邮件中读取内容,但无法保存它们,我正在使用mitem.SaveAs(savepath,OlSaveAsType.olHTML)保存it@rory.ap当前位置这是一个很好的提示,但千万不要说

在这里,我想将邮件项目转换为PDF,因此在第一步中,我将尝试根据主题行获取邮件项目,并将其保存为outlook支持的任何文件格式。但我做不到。有人能帮忙吗


提前感谢

切勿创建空的捕捉块。这是一个非常好的引入bug的方法。你有没有仔细检查过你的代码,以确保它真的在你认为它要去的地方?一切看起来都很好,我可以从所有邮件中读取内容,但无法保存它们,我正在使用mitem.SaveAs(savepath,OlSaveAsType.olHTML)保存it@rory.ap当前位置这是一个很好的提示,但千万不要说“永不”。空的catch块不会引入bug,它们会隐藏问题(如果没有发现问题,可能会导致意外行为)。存在空捕获块的使用案例,例如,在使用故障转移系统时(连接到主服务器并返回。如果错误(空捕获),则连接到备份服务器)。我并不是说这是一个好的实践,但有一些用例。@Flater——我们是在争论语义。我称之为“bug”的东西,你称之为“问题”或“意外行为”。无论如何,即使是在catch块中添加注释,也表明开发人员已经考虑过它,而不仅仅是将其留空,可能是错误的。@rory.ap
永远不要创建空的catch块。这是一种引入bug的好方法。
空的catch块不会固有地引入bug。空catch块中的注释并不能从本质上防止bug的引入。这不是语义学。
public void AccessOutlook()
{
  Application oOutlook;
  NameSpace oNs;
  MAPIFolder oFldr;
  try
  {
    oOutlook = new Application();
    oNs = oOutlook.GetNamespace("MAPI");
    oFldr = oNs.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
    string str = "Total Mail(s) in Inbox:" + oFldr.Items.Count;
    string str2 = "Total Unread items = " + oFldr.UnReadItemCount;
    foreach (var oMessage in oFldr.Items)
    {
      MailItem mitem = null;
      try
      {
        if (oMessage != null)
        {
          mitem = (MailItem)oMessage;
          String savepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + @"\" + "Sridhar.html";
          mitem.BodyFormat = OlBodyFormat.olFormatHTML;
          mitem.SaveAs(savepath, OlSaveAsType.olHTML);
        }
      }
      catch (System.Exception ex)
      {
      }
      if (mitem != null)
      {
        string str3 = mitem.Subject;
      }
    }
  }
  catch (System.Exception ex)
  {
  }
  finally
  {
    GC.Collect();
    oFldr = null;
    oNs = null;
    oOutlook = null;
  }
}