/// <summary> /// パスワード付きZIPのエントリを作成する. /// </summary> /// <param name="mailItem">メールアイテム</param> /// <param name="zipFolder">パスワード付きZIPの元にするフォルダ</param> private void CreateZipEntriesInFolder(IMyMailItem mailItem, ZipContentsFolder zipFolder) { if (mailItem.HasOneZipFileOnly()) { ExtractZipFile(zipFolder, mailItem.GetAttachments().First()); } else { SaveAttachmentsToZipFolder(zipFolder.ContentsRootFolderPath, mailItem.GetAttachments()); } }
/// <summary> /// ZIPファイルを展開する. /// </summary> /// <param name="destinationFolder">展開先のフォルダ</param> /// <param name="attachment">添付ファイル</param> private void ExtractZipFile(ZipContentsFolder destinationFolder, IMyAttachment attachment) { try { // 添付ファイルを一時的に保存する. attachment.SaveFile(destinationFolder.ZipFilePath); // ZIPファイルを展開する (展開先は、パスワード付きの元にするフォルダ.) var utility = new ZipFileUtiliy(); utility.ExtractZipFile(destinationFolder.ContentsRootFolderPath, destinationFolder.ZipFilePath); } finally { // 一時的に保存した元の添付ファイルを削除する File.Delete(destinationFolder.ZipFilePath); } }
/// <summary> /// 添付ファイルをパスワード付きZIPファイルに変換する. /// </summary> /// <param name="item"></param> /// <returns>ZIPファイルのパスワード</returns> public string ConvertAttachmentsToPasswordProtectedZipFile(IMyMailItem item) { // 最終的な添付ファイルとなるパスワード付きZIPファイル名を作成する var zipFileName = CreateZipFileName(item); // ZIPファイル作成用のフォルダを準備する using (var zipFolder = new ZipContentsFolder(zipFileName)) { // パスワード付きZIP用のエントリをフォルダにまとめて作成する. CreateZipEntriesInFolder(item, zipFolder); // パスワードを生成する. var password = GeneratePassword(); // 添付ファイル用のパスワード付きZIPファイルを生成する. ArchiveFolderWithPassword(zipFolder, password); // 現在の添付ファイルを作成したパスワード付きZIPファイルに置き換える ReplaceAttachmentsToZipFile(item, zipFolder); return(password); } }
/// <summary> /// 現在の添付ファイルをパスワード付きZIPファイルで置き換える /// </summary> /// <param name="item"></param> /// <param name="zipFolder"></param> private void ReplaceAttachmentsToZipFile(IMyMailItem item, ZipContentsFolder zipFolder) { item.RemoveAttachments(); item.AddAttachment(zipFolder.ZipFilePath); }
/// <summary> /// フォルダをパスワード付きZIPにする. /// </summary> /// <param name="zipFolder">ZIPフォルダ</param> /// <param name="password">パスワード</param> private void ArchiveFolderWithPassword(ZipContentsFolder zipFolder, string password) { var utility = new ZipFileUtiliy(); utility.ArchiveFolder(zipFolder.ZipFilePath, password, zipFolder.ContentsRootFolderPath); }