C# 将文件夹下的多个文件作为电子邮件附件发送

C# 将文件夹下的多个文件作为电子邮件附件发送,c#,zip,email-attachments,memorystream,dotnetzip,C#,Zip,Email Attachments,Memorystream,Dotnetzip,我想在邮件文件夹中以附件形式发送zip文件。这是我的文件夹结构: Document => Part1 =>all files. => Part2 =>all files. 通过上述方式,我希望创建一个zip文件名附件,其中我的文档文件夹将包含文件夹第1部分和第2部分 这是我的代码: string item1="1,2"; //document ids string item2="3,4";//document ids MemoryStream me

我想在邮件文件夹中以附件形式发送zip文件。这是我的文件夹结构:

Document  => Part1 =>all files.
          => Part2 =>all files.
通过上述方式,我希望创建一个zip文件名附件,其中我的文档文件夹将包含文件夹第1部分第2部分

这是我的代码:

string item1="1,2"; //document ids
string item2="3,4";//document ids
MemoryStream memoryStreamOfFile = new MemoryStream();
MemoryStream stream = new MemoryStream();
    foreach (var item in item1.Split(','))
    {
          var File1 = new FileDataResult();
          File1  = GetData(item);
          stream.Write(File1.FileData.ToArray(), 0,File1.FileData.Length);
          stream.Position = 0;
          zip.AddEntry(File1.FileData.FileName, stream);
    } 
   foreach (var item in item2.Split(','))
    {
         var File1 = new FileDataResult();
          File1  = GetData(item);
          stream.Write(File1.FileData.ToArray(), 0,File1.FileData.Length);
          stream.Position = 0;
          zip.AddEntry(File1.FileData.FileName, stream);
    } 
     zip.Save(memoryStreamOfFile);
     memoryStreamOfFile.Position = 0;
     sendmail.SendMail(string From, string To, string Subject, string Body,MemoryStream stream);

 mailMessage.Attachments.Add(new Attachment(stream,"ATTachment.zip",MediaTypeNames.Application.Zip));


public static FileDataResult GetData(string DocID)
{
   //Database code to fetch binary data from database
    SqlDataReader reader = command.ExecuteReader();
               while (reader.Read())
            {
                if (reader[0] == null)
                    return null;
                byte[] raw = (byte[])reader[0]; 
                File.FileData = raw;
                File.FileName = reader[1].ToString();
                reader.Close();
                return File;
            }
}



public class FileDataResult
    {
        public byte[] FileData { get; set; }
        public string FileName { get; set; }
    }
电子邮件正在顺利进行,但问题是当我提取zip文件,然后我没有得到文件中的任何数据。例如,在图像的情况下,我没有得到图像

尝试以下方法

using (ZipFile zip = new ZipFile())
{
    foreach(string file in Directory.GetFiles(folder))
    {
        zip.AddFile(file, Path.GetFileName(file));
    }
    zip.Save("test.zip"));
}
尝试如下

using (ZipFile zip = new ZipFile())
{
    foreach(string file in Directory.GetFiles(folder))
    {
        zip.AddFile(file, Path.GetFileName(file));
    }
    zip.Save("test.zip"));
}

文件扩展名在哪里?你得到了图像。只是,操作系统不知道它是一个映像。尝试指定文件扩展名,如“Abc”+item+“.tiff”,但如何创建我在问题中指定的结构“zip”的类型是什么?如果是IonicZip。如果不是,我相信有一个类似的方法来添加目录。它有一个同名的方法。CreateDirectoryByName(字符串);这将返回另一个ZipEntry,您可以使用它将文件添加到新文件夹。对不起,我的IPhone没有Visual Studio。我记录了你需要的一切。文件扩展名在哪里?你得到了图像。只是,操作系统不知道它是一个映像。尝试指定文件扩展名,如“Abc”+item+“.tiff”,但如何创建我在问题中指定的结构“zip”的类型是什么?如果是IonicZip。如果不是,我相信有一个类似的方法来添加目录。它有一个同名的方法。CreateDirectoryByName(字符串);这将返回另一个ZipEntry,您可以使用它将文件添加到新文件夹。对不起,我的IPhone没有Visual Studio。我记录了您需要的所有内容。我的数据库中保存了二进制数据,因此我通过文档id从数据库中获取二进制数据并从itI创建zip文件。我的数据库中保存了二进制数据,因此我通过文档id从数据库中获取二进制数据并从中创建zip文件