Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何捕获电子邮件_C#_Sharepoint_Outlook Addin_Outlook 2010 - Fatal编程技术网

C# 如何捕获电子邮件

C# 如何捕获电子邮件,c#,sharepoint,outlook-addin,outlook-2010,C#,Sharepoint,Outlook Addin,Outlook 2010,我已经在Outlook中创建了一个基本的自定义任务窗格 我想拖动一封电子邮件并将其放到任务窗格中。当删除时,它应该允许我将电子邮件捕获为一个我猜想的对象,允许我处理它,例如保存到sharepoint位置 可能吗?如果有,有什么建议吗 我使用的是VS2013 C#.NET 4.0,外接程序适用于Outlook 2010/2013。通过检查资源管理器类的属性,可以获取删除的项目或多个项目(如果允许)。请在以下文章中阅读更多关于这方面的内容: 试试这样的方法 public sta

我已经在Outlook中创建了一个基本的自定义任务窗格

我想拖动一封电子邮件并将其放到任务窗格中。当删除时,它应该允许我将电子邮件捕获为一个我猜想的对象,允许我处理它,例如保存到sharepoint位置

可能吗?如果有,有什么建议吗


我使用的是VS2013 C#.NET 4.0,外接程序适用于Outlook 2010/2013。

通过检查
资源管理器
类的属性,可以获取删除的项目或多个项目(如果允许)。请在以下文章中阅读更多关于这方面的内容:


    • 试试这样的方法

              public static string[] GetDropedFiles(DragEventArgs e)
              {
                  string[] files = null;
                  var outlookFile = e.Data.GetData("FileGroupDescriptor", true) as MemoryStream;
                  if (outlookFile != null)
                  {
                      OutlookEmailObject dataObject = new OutlookEmailObject(e.Data);
      
                      var filenames = (string[])dataObject.GetData("FileGroupDescriptorW");
                      var filestreams = (MemoryStream[])dataObject.GetData("FileContents");
      
                      files = new string[filenames.Length];
                      for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
                      {
                          string filename = filenames[fileIndex];
                          MemoryStream filestream = filestreams[fileIndex];
      
                          string path = Path.GetTempPath();
                          string fullFileName = path + filename;
      
                          FileStream outputStream = File.Create(fullFileName);
                          filestream.WriteTo(outputStream);
                          outputStream.Close();
      
                          files[fileIndex] = fullFileName;
                      }
                  }
                  else
                      files = (string[])e.Data.GetData(DataFormats.FileDrop);
      
                  return files;
              }
      
      公共静态字符串[]GetDropedFiles(DragEventArgs e)
      {
      string[]files=null;
      var outlookFile=e.Data.GetData(“FileGroupDescriptor”,true)作为MemoryStream;
      if(outlookFile!=null)
      {
      OutlookEmailObject dataObject=新的OutlookEmailObject(e.Data);
      var filenames=(string[])dataObject.GetData(“FileGroupDescriptorW”);
      var filestreams=(MemoryStream[])dataObject.GetData(“FileContents”);
      files=新字符串[filename.Length];
      对于(int fileIndex=0;fileIndex
      您可以在此处获得OutlookEmailObject类(下载代码示例):

      (当然,您应该在完成后删除所有临时文件)

      先决条件和设置
      • Windows10Pro
      • Visual Studio 2013终极版与Office开发
      • 带有电子邮件帐户的Outlook 2013
      项目
      • 在Visual Studio中,选择新建项目->Visual C#->Office/SharePoint->Office加载项->Outlook 2013加载项
      • 右键单击项目->添加->用户控件
      • 打开“ThisAddIn.cs”并将以下代码添加到“ThisAddIn\u启动”方法中:

      拖放消息
      • 在解决方案资源管理器中双击UserControl1。这将打开设计器窗口
      • 在属性集AllowDrop=True中,连接两个事件处理程序DragDropDragEnter

        private void UserControl1_DragEnter(object sender, DragEventArgs e)
        {
            // if you want to read the message data as a string use this:
            if (e.Data.GetDataPresent(DataFormats.UnicodeText))
            {
                e.Effect = DragDropEffects.Copy;
            }
            // if you want to read the whole .msg file use this:
            if (e.Data.GetDataPresent("FileGroupDescriptorW") && 
                e.Data.GetDataPresent("FileContents"))
            {
                e.Effect = DragDropEffects.Copy;
            }
        }
        
        private void UserControl1_DragDrop(object sender, DragEventArgs e)
        {
            // to read basic info about the mail use this:
            var text = e.Data.GetData(DataFormats.UnicodeText).ToString();
            var message = text.Split(new string[] { "\r\n" }, StringSplitOptions.None)[1];
            var parts = message.Split('\t');
            var from = parts[0]; // Email From
            var subject = parts[1]; // Email Subject
            var time = parts[2]; // Email Time
        
            // to get the .msg file contents use this:
            // credits to "George Vovos", http://stackoverflow.com/a/43577490/1093508
            var outlookFile = e.Data.GetData("FileGroupDescriptor", true) as MemoryStream;
            if (outlookFile != null)
            {
                var dataObject = new iwantedue.Windows.Forms.OutlookDataObject(e.Data);
        
                var filenames = (string[])dataObject.GetData("FileGroupDescriptorW");
                var filestreams = (MemoryStream[])dataObject.GetData("FileContents");
        
                for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
                {
                    string filename = filenames[fileIndex];
                    MemoryStream filestream = filestreams[fileIndex];
        
                    // do whatever you want with filestream, e.g. save to a file:
                    string path = Path.GetTempPath() + filename;
                    using (var outputStream = File.Create(path))
                    {
                        filestream.WriteTo(outputStream);
                    }
                }
            }
        }
        
        private void UserControl1\u DragEnter(对象发送方,DragEventArgs e)
        {
        //如果要以字符串形式读取消息数据,请使用以下命令:
        if(例如Data.GetDataPresent(DataFormats.unicodext))
        {
        e、 效果=DragDropEffects.Copy;
        }
        //如果要读取整个.msg文件,请使用以下命令:
        如果(例如Data.GetDataPresent(“FileGroupDescriptorW”)&&
        e、 Data.GetDataPresent(“文件内容”))
        {
        e、 效果=DragDropEffects.Copy;
        }
        }
        私有void UserControl1_DragDrop(对象发送方,DragEventArgs e)
        {
        //要阅读有关邮件的基本信息,请使用以下内容:
        var text=e.Data.GetData(DataFormats.UnicodeText.ToString();
        var message=text.Split(新字符串[]{“\r\n”},StringSplitOptions.None)[1];
        var parts=message.Split('\t');
        var from=parts[0];//电子邮件发件人
        var subject=parts[1];//电子邮件主题
        var time=parts[2];//电子邮件时间
        //要获取.msg文件内容,请使用以下命令:
        //归功于“乔治·沃沃斯”,http://stackoverflow.com/a/43577490/1093508
        var outlookFile=e.Data.GetData(“FileGroupDescriptor”,true)作为MemoryStream;
        if(outlookFile!=null)
        {
        var-dataObject=new-iwantedue.Windows.Forms.OutlookDataObject(e.Data);
        var filenames=(string[])dataObject.GetData(“FileGroupDescriptorW”);
        var filestreams=(MemoryStream[])dataObject.GetData(“FileContents”);
        对于(int fileIndex=0;fileIndex
      您可以从中获取“iwantedue.Windows.Forms.OutlookDataObject”,也可以使用它

      演示

      你说的“用它做事”是什么意思?作为原始.msg文件访问邮件消息是否足够?(文件名和内容为原始字节)应该归功于David Ewen:)。我们的答案基本上是他在代码项目上的工作。我以前使用过它,没有任何问题,不知道OP是否真的有任何问题。。。
      private void UserControl1_DragEnter(object sender, DragEventArgs e)
      {
          // if you want to read the message data as a string use this:
          if (e.Data.GetDataPresent(DataFormats.UnicodeText))
          {
              e.Effect = DragDropEffects.Copy;
          }
          // if you want to read the whole .msg file use this:
          if (e.Data.GetDataPresent("FileGroupDescriptorW") && 
              e.Data.GetDataPresent("FileContents"))
          {
              e.Effect = DragDropEffects.Copy;
          }
      }
      
      private void UserControl1_DragDrop(object sender, DragEventArgs e)
      {
          // to read basic info about the mail use this:
          var text = e.Data.GetData(DataFormats.UnicodeText).ToString();
          var message = text.Split(new string[] { "\r\n" }, StringSplitOptions.None)[1];
          var parts = message.Split('\t');
          var from = parts[0]; // Email From
          var subject = parts[1]; // Email Subject
          var time = parts[2]; // Email Time
      
          // to get the .msg file contents use this:
          // credits to "George Vovos", http://stackoverflow.com/a/43577490/1093508
          var outlookFile = e.Data.GetData("FileGroupDescriptor", true) as MemoryStream;
          if (outlookFile != null)
          {
              var dataObject = new iwantedue.Windows.Forms.OutlookDataObject(e.Data);
      
              var filenames = (string[])dataObject.GetData("FileGroupDescriptorW");
              var filestreams = (MemoryStream[])dataObject.GetData("FileContents");
      
              for (int fileIndex = 0; fileIndex < filenames.Length; fileIndex++)
              {
                  string filename = filenames[fileIndex];
                  MemoryStream filestream = filestreams[fileIndex];
      
                  // do whatever you want with filestream, e.g. save to a file:
                  string path = Path.GetTempPath() + filename;
                  using (var outputStream = File.Create(path))
                  {
                      filestream.WriteTo(outputStream);
                  }
              }
          }
      }