/// <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);
        }