/// <summary>
        /// 登録された名称とドメインから、宛先候補ではないアドレスが宛先に含まれている場合に、警告を表示する。
        /// </summary>
        private void CheckMailbodyAndRecipient()
        {
            //Load NameAndDomainsList
            var csv = new ReadAndWriteCsv("NameAndDomains.csv");
            var nameAndDomainsList = csv.GetCsvRecords <NameAndDomains>(csv.LoadCsv <NameAndDomainsMap>());

            //メールの本文中に、登録された名称があるか確認。
            var recipientCandidateDomains = (from nameAnddomain in nameAndDomainsList where _checkList.MailBody.Contains(nameAnddomain.Name) select nameAnddomain.Domain).ToList();

            //登録された名称かつ本文中に登場した名称以外のドメインが宛先に含まれている場合、警告を表示。
            //送信先の候補が見つからない場合、何もしない。(見つからない場合の方が多いため、警告ばかりになってしまう。)
            if (recipientCandidateDomains.Count == 0)
            {
                return;
            }

            foreach (var recipients in _displayNameAndRecipient)
            {
                if (recipientCandidateDomains.Any(domains => domains.Equals(recipients.Key.Substring(recipients.Key.IndexOf("@", StringComparison.Ordinal)))))
                {
                    continue;
                }

                //送信者ドメインは警告対象外。
                if (!recipients.Key.Contains(_checkList.SenderDomain))
                {
                    _checkList.Alerts.Add(new Alert {
                        AlertMessage = recipients.Value + " : " + Resources.IsAlertAddressMaybeIrrelevant, IsImportant = true, IsWhite = false, IsChecked = false
                    });
                }
            }
        }
        /// <summary>
        /// 本文に登録したキーワードがある場合、登録した警告文を表示する。
        /// </summary>
        private void CheckKeyword()
        {
            //Load AlertKeywordAndMessage
            var csv = new ReadAndWriteCsv("AlertKeywordAndMessageList.csv");
            var alertKeywordAndMessageList = csv.GetCsvRecords <AlertKeywordAndMessage>(csv.LoadCsv <AlertKeywordAndMessageMap>());

            if (alertKeywordAndMessageList.Count == 0)
            {
                return;
            }
            foreach (var i in alertKeywordAndMessageList)
            {
                if (!_checkList.MailBody.Contains(i.AlertKeyword))
                {
                    continue;
                }

                _checkList.Alerts.Add(new Alert {
                    AlertMessage = i.Message, IsImportant = true, IsWhite = false, IsChecked = false
                });

                if (!i.IsCanNotSend)
                {
                    continue;
                }

                _checkList.IsCanNotSendMail      = true;
                _checkList.CanNotSendMailMessage = i.Message;
            }
        }
Esempio n. 3
0
        private void LoadWhitelistData()
        {
            var readCsv   = new ReadAndWriteCsv("Whitelist.csv");
            var whitelist = readCsv.GetCsvRecords <Whitelist>(readCsv.LoadCsv <WhitelistMap>());

            foreach (var data in whitelist)
            {
                Whitelist.Add(data);
            }
        }
        private void SaveWhiteListToCsv()
        {
            var list = new ArrayList();

            foreach (var data in Whitelist)
            {
                list.Add(data);
            }

            var writeCsv = new ReadAndWriteCsv("Whitelist.csv");

            writeCsv.WriteRecordsToCsv <WhitelistMap>(list);
        }
        /// <summary>
        /// ファイルの添付忘れを確認。
        /// </summary>
        /// <param name="mail"></param>
        private void CheckForgotAttach(Outlook._MailItem mail)
        {
            if (mail.Attachments.Count >= 1)
            {
                return;
            }

            var generalSetting = new List <GeneralSetting>();
            var readCsv        = new ReadAndWriteCsv("GeneralSetting.csv");

            foreach (var data in readCsv.GetCsvRecords <GeneralSetting>(readCsv.LoadCsv <GeneralSettingMap>()))
            {
                generalSetting.Add((data));
            }

            string attachmentsKeyword;

            if (generalSetting.Count == 0)
            {
                attachmentsKeyword = "添付";
            }
            else
            {
                if (!generalSetting[0].EnableForgottenToAttachAlert)
                {
                    return;
                }

                switch (generalSetting[0].LanguageCode)
                {
                case "ja-JP":
                    attachmentsKeyword = "添付";
                    break;

                case "en-US":
                    attachmentsKeyword = "attached file";
                    break;

                default:
                    return;
                }
            }

            if (_checkList.MailBody.Contains(attachmentsKeyword))
            {
                _checkList.Alerts.Add(new Alert {
                    AlertMessage = Resources.ForgottenToAttachAlert, IsImportant = true, IsWhite = false, IsChecked = false
                });
            }
        }
Esempio n. 6
0
 private async Task SaveWhiteListToCsv()
 {
     var list     = Whitelist.Cast <object>().ToList();
     var writeCsv = new ReadAndWriteCsv("Whitelist.csv");
     await Task.Run(() => writeCsv.WriteRecordsToCsv <WhitelistMap>(list));
 }
        /// <summary>
        /// 送信遅延時間を算出する。
        /// 条件に該当する最も長い送信遅延時間を返す。
        /// </summary>
        /// <returns>送信遅延時間(分)</returns>
        private int CalcDeferredMinutes()
        {
            var readCsv = new ReadAndWriteCsv("DeferredDeliveryMinutes.csv");
            var deferredDeliveryMinutes = readCsv.GetCsvRecords <DeferredDeliveryMinutes>(readCsv.LoadCsv <DeferredDeliveryMinutesMap>());

            if (deferredDeliveryMinutes.Count == 0)
            {
                return(0);
            }

            var deferredMinutes = 0;

            //@のみで登録していた場合、それを標準の送信遅延時間とする。
            foreach (var config in deferredDeliveryMinutes)
            {
                if (config.TartgetAddress == "@")
                {
                    deferredMinutes = config.DeferredMinutes;
                }
            }

            if (_toDisplayNameAndRecipient.Count != 0)
            {
                foreach (var toRecipients in _toDisplayNameAndRecipient)
                {
                    foreach (var config in deferredDeliveryMinutes)
                    {
                        if (toRecipients.Value.Contains(config.TartgetAddress) && deferredMinutes < config.DeferredMinutes)
                        {
                            deferredMinutes = config.DeferredMinutes;
                        }
                    }
                }
            }

            if (_ccDisplayNameAndRecipient.Count != 0)
            {
                foreach (var ccRecipients in _ccDisplayNameAndRecipient)
                {
                    foreach (var config in deferredDeliveryMinutes)
                    {
                        if (ccRecipients.Value.Contains(config.TartgetAddress) && deferredMinutes < config.DeferredMinutes)
                        {
                            deferredMinutes = config.DeferredMinutes;
                        }
                    }
                }
            }

            if (_bccDisplayNameAndRecipient.Count != 0)
            {
                foreach (var bccRecipients in _bccDisplayNameAndRecipient)
                {
                    foreach (var config in deferredDeliveryMinutes)
                    {
                        if (bccRecipients.Value.Contains(config.TartgetAddress) && deferredMinutes < config.DeferredMinutes)
                        {
                            deferredMinutes = config.DeferredMinutes;
                        }
                    }
                }
            }

            return(deferredMinutes);
        }
        /// <summary>
        /// 送信先メールアドレスを取得し、チェックリストに追加する。
        /// </summary>
        private void GetRecipient()
        {
            // TODO To be improved

            //Load Whitelist
            var readCsv = new ReadAndWriteCsv("Whitelist.csv");

            _whitelist.AddRange(readCsv.GetCsvRecords <Whitelist>(readCsv.LoadCsv <WhitelistMap>()));

            //Load AlertAddressList
            readCsv = new ReadAndWriteCsv("AlertAddressList.csv");
            var alertAddresslist = readCsv.GetCsvRecords <AlertAddress>(readCsv.LoadCsv <AlertAddressMap>());

            // 宛先や登録名から、表示用テキスト(メールアドレスや登録名)を各エリアに表示。
            // 宛先ドメインが送信元ドメインと異なる場合、色を変更するフラグをtrue、そうでない場合falseとする。
            // ホワイトリストに含まれる宛先の場合、ListのIsCheckedフラグをtrueにして、最初からチェック済みとする。
            // 警告アドレスリストに含まれる宛先の場合、AlertBoxにその旨を追加する。

            //TODO 重複が多いので切り出してまとめる。
            foreach (var i in _toDisplayNameAndRecipient)
            {
                var isExternal = !i.Key.Contains(_checkList.SenderDomain);
                var isWhite    = _whitelist.Count != 0 && _whitelist.Any(x => i.Key.Contains(x.WhiteName));
                var isSkip     = false;

                if (isWhite)
                {
                    foreach (var whitelist in _whitelist)
                    {
                        if (i.Key.Contains(whitelist.WhiteName))
                        {
                            isSkip = whitelist.IsSkipConfirmation;
                        }
                    }
                }

                _checkList.ToAddresses.Add(new Address {
                    MailAddress = i.Value, IsExternal = isExternal, IsWhite = isWhite, IsChecked = isWhite, IsSkip = isSkip
                });

                if (alertAddresslist.Count == 0 || !alertAddresslist.Any(address => i.Key.Contains(address.TartgetAddress)))
                {
                    continue;
                }

                _checkList.Alerts.Add(new Alert
                {
                    AlertMessage = Resources.IsAlertAddressToAlert + $"[{i.Value}]",
                    IsImportant  = true,
                    IsWhite      = false,
                    IsChecked    = false
                });

                //送信禁止アドレスに該当する場合、禁止フラグを立て対象メールアドレスを説明文へ追加。
                foreach (var alertAddress in alertAddresslist)
                {
                    if (!i.Key.Contains(alertAddress.TartgetAddress) || !alertAddress.IsCanNotSend)
                    {
                        continue;
                    }

                    _checkList.IsCanNotSendMail      = true;
                    _checkList.CanNotSendMailMessage = Resources.SendingForbidAddress + $"[{i.Value}]";
                }
            }

            foreach (var i in _ccDisplayNameAndRecipient)
            {
                var isExternal = !i.Key.Contains(_checkList.SenderDomain);
                var isWhite    = _whitelist.Count != 0 && _whitelist.Any(x => i.Key.Contains(x.WhiteName));
                var isSkip     = false;

                if (isWhite)
                {
                    foreach (var whitelist in _whitelist)
                    {
                        if (i.Key.Contains(whitelist.WhiteName))
                        {
                            isSkip = whitelist.IsSkipConfirmation;
                        }
                    }
                }

                _checkList.CcAddresses.Add(new Address {
                    MailAddress = i.Value, IsExternal = isExternal, IsWhite = isWhite, IsChecked = isWhite, IsSkip = isSkip
                });

                if (alertAddresslist.Count == 0 || !alertAddresslist.Any(address => i.Key.Contains(address.TartgetAddress)))
                {
                    continue;
                }

                _checkList.Alerts.Add(new Alert
                {
                    AlertMessage = Resources.IsAlertAddressCcAlert + $"[{i.Value}]",
                    IsImportant  = true,
                    IsWhite      = false,
                    IsChecked    = false
                });

                //送信禁止アドレスに該当する場合、禁止フラグを立て対象メールアドレスを説明文へ追加。
                foreach (var alertAddress in alertAddresslist)
                {
                    if (!i.Key.Contains(alertAddress.TartgetAddress) || !alertAddress.IsCanNotSend)
                    {
                        continue;
                    }

                    _checkList.IsCanNotSendMail      = true;
                    _checkList.CanNotSendMailMessage = Resources.SendingForbidAddress + $"[{i.Value}]";
                }
            }

            foreach (var i in _bccDisplayNameAndRecipient)
            {
                var isExternal = !i.Key.Contains(_checkList.SenderDomain);
                var isWhite    = _whitelist.Count != 0 && _whitelist.Any(x => i.Key.Contains(x.WhiteName));
                var isSkip     = false;

                if (isWhite)
                {
                    foreach (var whitelist in _whitelist)
                    {
                        if (i.Key.Contains(whitelist.WhiteName))
                        {
                            isSkip = whitelist.IsSkipConfirmation;
                        }
                    }
                }

                _checkList.BccAddresses.Add(new Address {
                    MailAddress = i.Value, IsExternal = isExternal, IsWhite = isWhite, IsChecked = isWhite, IsSkip = isSkip
                });

                if (alertAddresslist.Count == 0 || !alertAddresslist.Any(address => i.Key.Contains(address.TartgetAddress)))
                {
                    continue;
                }

                _checkList.Alerts.Add(new Alert
                {
                    AlertMessage = Resources.IsAlertAddressBccAlert + $"[{i.Value}]",
                    IsImportant  = true,
                    IsWhite      = false,
                    IsChecked    = false
                });

                //送信禁止アドレスに該当する場合、禁止フラグを立て対象メールアドレスを説明文へ追加。
                foreach (var alertAddress in alertAddresslist)
                {
                    if (!i.Key.Contains(alertAddress.TartgetAddress) || !alertAddress.IsCanNotSend)
                    {
                        continue;
                    }

                    _checkList.IsCanNotSendMail      = true;
                    _checkList.CanNotSendMailMessage = Resources.SendingForbidAddress + $"[{i.Value}]";
                }
            }
        }
        private void AutoAddCcAndBcc(Outlook._MailItem mail)
        {
            var autoAddedCcAddressList  = new List <string>();
            var autoAddedBccAddressList = new List <string>();

            //Load AutoCcBccKeywordList
            var autoCcBccKeywordListCsv = new ReadAndWriteCsv("AutoCcBccKeywordList.csv");
            var autoCcBccKeywordList    = autoCcBccKeywordListCsv.GetCsvRecords <AutoCcBccKeyword>(autoCcBccKeywordListCsv.LoadCsv <AutoCcBccKeywordMap>());

            if (autoCcBccKeywordList.Count != 0)
            {
                foreach (var i in autoCcBccKeywordList)
                {
                    if (!_checkList.MailBody.Contains(i.Keyword) || !i.AutoAddAddress.Contains("@"))
                    {
                        continue;
                    }

                    if (i.CcOrBcc == CcOrBcc.CC)
                    {
                        if (!autoAddedCcAddressList.Contains(i.AutoAddAddress) && !_ccDisplayNameAndRecipient.ContainsKey(i.AutoAddAddress))
                        {
                            var recip = mail.Recipients.Add(i.AutoAddAddress);
                            recip.Type = (int)Outlook.OlMailRecipientType.olCC;

                            autoAddedCcAddressList.Add(i.AutoAddAddress);
                        }
                    }
                    else if (!autoAddedBccAddressList.Contains(i.AutoAddAddress) && !_bccDisplayNameAndRecipient.ContainsKey(i.AutoAddAddress))
                    {
                        var recip = mail.Recipients.Add(i.AutoAddAddress);
                        recip.Type = (int)Outlook.OlMailRecipientType.olBCC;

                        autoAddedBccAddressList.Add(i.AutoAddAddress);
                    }

                    _checkList.Alerts.Add(new Alert {
                        AlertMessage = Resources.AutoAddDestination + $@"[{i.CcOrBcc}] [{i.AutoAddAddress}] (" + Resources.ApplicableKeywords + $" 「{i.Keyword}」)", IsImportant = false, IsWhite = true, IsChecked = true
                    });

                    // 自動追加されたアドレスはホワイトリスト登録アドレス扱い。
                    _whitelist.Add(new Whitelist {
                        WhiteName = i.AutoAddAddress
                    });
                }
            }

            //Load AutoCcBccRecipientList
            // TODO To be improved
            var autoCcBccRecipientListcsv = new ReadAndWriteCsv("AutoCcBccRecipientList.csv");
            var autoCcBccRecipientList    = autoCcBccRecipientListcsv.GetCsvRecords <AutoCcBccRecipient>(autoCcBccRecipientListcsv.LoadCsv <AutoCcBccRecipientMap>());

            if (autoCcBccRecipientList.Count != 0)
            {
                foreach (var i in autoCcBccRecipientList)
                {
                    if (!_displayNameAndRecipient.Any(recipient => recipient.Key.Contains(i.TargetRecipient)) || !i.AutoAddAddress.Contains("@"))
                    {
                        continue;
                    }

                    if (i.CcOrBcc == CcOrBcc.CC)
                    {
                        if (!autoAddedCcAddressList.Contains(i.AutoAddAddress) && !_ccDisplayNameAndRecipient.ContainsKey(i.AutoAddAddress))
                        {
                            var recip = mail.Recipients.Add(i.AutoAddAddress);
                            recip.Type = (int)Outlook.OlMailRecipientType.olCC;

                            autoAddedCcAddressList.Add(i.AutoAddAddress);
                        }
                    }
                    else if (!autoAddedBccAddressList.Contains(i.AutoAddAddress) && !_bccDisplayNameAndRecipient.ContainsKey(i.AutoAddAddress))
                    {
                        var recip = mail.Recipients.Add(i.AutoAddAddress);
                        recip.Type = (int)Outlook.OlMailRecipientType.olBCC;

                        autoAddedBccAddressList.Add(i.AutoAddAddress);
                    }

                    _checkList.Alerts.Add(new Alert {
                        AlertMessage = Resources.AutoAddDestination + $@"[{i.CcOrBcc}] [{i.AutoAddAddress}] (" + Resources.ApplicableDestination + $" 「{i.TargetRecipient}」)", IsImportant = false, IsWhite = true, IsChecked = true
                    });

                    // 自動追加されたアドレスはホワイトリスト登録アドレス扱い。
                    _whitelist.Add(new Whitelist {
                        WhiteName = i.AutoAddAddress
                    });
                }
            }
            mail.Recipients.ResolveAll();
        }