gpt4 book ai didi

C# 从 outlook 电子邮件中拖放附件

转载 作者:太空狗 更新时间:2023-10-30 00:39:51 26 4
gpt4 key购买 nike

我想在 WinForm 解决方案中使用/读取 Outlook 电子邮件中的附件。

例如:电子邮件附有 TXT 文件;我想将 TXT 文件拖放到 WinForm 中,同时读取 TXT。

最佳答案

这是一个老问题,但无论如何我都会提供另一个不涉及使用 Outlook 对象的答案。

This URL 提供了大约有 13 年历史但似乎仍然有效的工作代码,用于处理 Outlook 传递给 DropDrop 事件的“FileGroupDescriptor”和“FileContents”数据。以防万一链接失效,这里是相关代码,直接复制/粘贴:

拖动输入事件:

private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
// for this program, we allow a file to be dropped from Explorer
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{ e.Effect = DragDropEffects.Copy;}
// or this tells us if it is an Outlook attachment drop
else if (e.Data.GetDataPresent("FileGroupDescriptor"))
{ e.Effect = DragDropEffects.Copy;}
// or none of the above
else
{ e.Effect = DragDropEffects.None;}
}

拖放事件:

private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
string [] fileNames = null;

try
{
if ( e.Data.GetDataPresent(DataFormats.FileDrop,false) == true)
{
fileNames = (string []) e.Data.GetData(DataFormats.FileDrop);
// handle each file passed as needed
foreach( string fileName in fileNames)
{
// do what you are going to do with each filename
}
}
else if (e.Data.GetDataPresent("FileGroupDescriptor"))
{
//
// the first step here is to get the filename
// of the attachment and
// build a full-path name so we can store it
// in the temporary folder
//

// set up to obtain the FileGroupDescriptor
// and extract the file name
Stream theStream = (Stream) e.Data.GetData("FileGroupDescriptor");
byte [] fileGroupDescriptor = new byte[512];
theStream.Read(fileGroupDescriptor,0,512);
// used to build the filename from the FileGroupDescriptor block
StringBuilder fileName = new StringBuilder("");
// this trick gets the filename of the passed attached file
for(int i=76; fileGroupDescriptor[i]!=0; i++)
{ fileName.Append(Convert.ToChar(fileGroupDescriptor[i]));}
theStream.Close();
string path = Path.GetTempPath();
// put the zip file into the temp directory
string theFile = path+fileName.ToString();
// create the full-path name

//
// Second step: we have the file name.
// Now we need to get the actual raw
// data for the attached file and copy it to disk so we work on it.
//

// get the actual raw file into memory
MemoryStream ms = (MemoryStream) e.Data.GetData(
"FileContents",true);
// allocate enough bytes to hold the raw data
byte [] fileBytes = new byte[ms.Length];
// set starting position at first byte and read in the raw data
ms.Position = 0;
ms.Read(fileBytes,0,(int)ms.Length);
// create a file and save the raw zip file to it
FileStream fs = new FileStream(theFile,FileMode.Create);
fs.Write(fileBytes,0,(int)fileBytes.Length);

fs.Close(); // close the file

FileInfo tempFile = new FileInfo(theFile);

// always good to make sure we actually created the file
if ( tempFile.Exists == true)
{
// for now, just delete what we created
tempFile.Delete();
}
else
{ Trace.WriteLine("File was not created!");}
}

}
catch (Exception ex)
{
Trace.WriteLine("Error in DragDrop function: " + ex.Message);

// don't use MessageBox here - Outlook or Explorer is waiting !
}

}

请注意,此代码没有Dispose 它应该处理的对象,例如MemoryStreamFileStream 对象。

关于C# 从 outlook 电子邮件中拖放附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33019385/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com