Ejemplo n.º 1
0
        /// <summary>
        /// 対象のメールアイテムが添付ファイル暗号化を行える状態か検証する
        /// </summary>
        /// <param name="item">メールアイテム</param>
        public void ValidateMailItemForEncryption(IMyMailItem item)
        {
            if (item.RecipientsCount <= 0)
            {
                throw new MailItemValidationException("送信先が設定されていません。TO, CC, BCCのいずれかに一つ以上のメールアドレスを入力してください");
            }
            if (String.IsNullOrEmpty(item.Subject))
            {
                throw new MailItemValidationException("件名が設定されていません。件名を入力して下さい");
            }

            var attachments = item.GetAttachments().ToList();

            if (attachments.Count <= 0)
            {
                throw new MailItemValidationException("添付ファイルが一つも存在しません。一つ以上の添付ファイルを設定して下さい。");
            }

            var fileNameSet = new HashSet <string>();

            foreach (var attachment in attachments)
            {
                if (fileNameSet.Contains(attachment.FileName))
                {
                    throw new MailItemValidationException("添付ファイルに同名のファイルが複数存在します。添付ファイル名は全て別名にして下さい:" + attachment.FileName);
                }
                fileNameSet.Add(attachment.FileName);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 添付ファイルを暗号化して送信する.
        /// </summary>
        /// <param name="item">メールアイテム</param>
        private void EncryptAndSend(IMyMailItem item)
        {
            var operation = new MailItemOperation();

            // メールアイテムの検証
            operation.ValidateMailItemForEncryption(item);

            // 添付ファイルをパスワード付きZIPファイルに変換する.
            var password = operation.ConvertAttachmentsToPasswordProtectedZipFile(item);

            // パスワード通知メールを作成する.
            var passwordNotificationMail = operation.CreatePasswordNotificationMail(item, password);

            // 作成したメールアイテムを保存する.
            item.Save();
            passwordNotificationMail.Save();
            passwordNotificationMail.Display();

            // 送信まで自動で行う場合は、送信
            if (Properties.Settings.Default.AutoSending)
            {
                item.Send();
                passwordNotificationMail.Send();
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// ZIPファイル名を作成する
 /// </summary>
 /// <param name="item"></param>
 /// <returns></returns>
 private string CreateZipFileName(IMyMailItem item)
 {
     if (item.HasOneZipFileOnly())
     {
         // 添付ファイルがZIPファイル一つのみの場合は、ZIPファイル名を流用する
         return(item.GetAttachments().First().FileName);
     }
     return(CreateDefaultZipFileName());
 }
Ejemplo n.º 4
0
 /// <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());
     }
 }
Ejemplo n.º 5
0
        /// <summary>
        /// パスワード通知メールを作成する.
        /// </summary>
        /// <param name="sourceMail">元になるメールアイテム</param>
        /// <param name="password">パスワード</param>
        /// <returns></returns>
        public IMyMailItem CreatePasswordNotificationMail(IMyMailItem sourceMail, string password)
        {
            // 同じ送信先、送信元のメールアイテムを作成する.
            var result = sourceMail.NewItemWithSameRecipientsAndSender();

            // 本文を作成する
            var bodyTemplate = Template.Parse(Properties.Settings.Default.PasswordMailTemplate);
            var subject      = Properties.Settings.Default.PasswordMailTitlePrefix + sourceMail.Subject;
            var body         = bodyTemplate.Render(new
            {
                Tos     = result.Tos(),
                Company = Properties.Settings.Default.DefaultCompany,
                User    = Properties.Settings.Default.DefaultUserName,
                sourceMail.Subject,
                Password = password,
            });

            result.SetContents(subject, body);

            return(result);
        }
Ejemplo n.º 6
0
        /// <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);
            }
        }
Ejemplo n.º 7
0
 /// <summary>
 /// 現在の添付ファイルをパスワード付きZIPファイルで置き換える
 /// </summary>
 /// <param name="item"></param>
 /// <param name="zipFolder"></param>
 private void ReplaceAttachmentsToZipFile(IMyMailItem item, ZipContentsFolder zipFolder)
 {
     item.RemoveAttachments();
     item.AddAttachment(zipFolder.ZipFilePath);
 }