C# 如何捕获电子邮件
我已经在Outlook中创建了一个基本的自定义任务窗格 我想拖动一封电子邮件并将其放到任务窗格中。当删除时,它应该允许我将电子邮件捕获为一个我猜想的对象,允许我处理它,例如保存到sharepoint位置 可能吗?如果有,有什么建议吗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
我使用的是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中,连接两个事件处理程序DragDrop和DragEnter
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
你说的“用它做事”是什么意思?作为原始.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);
}
}
}
}