Ejemplo n.º 1
0
        public void SaveCountTest(int n)
        {
            var          mail     = new Mail();
            const string uid      = "XXX123";
            const int    size     = 100;
            const string host     = "hostname";
            const string user     = "******";
            var          ip       = new Ip("10.0.0.1");
            var          from     = new MailAddress("1@1");
            var          to       = new MailAddress("2@2");
            var          mailInfo = new MailInfo(uid, size, host, ip, from, to);

            //同一内容でn回送信
            for (int i = 0; i < n; i++)
            {
                sut.Save(user, mail, mailInfo);
            }

            //メールボックス内に蓄積されたファイル数を検証する
            var path = string.Format("{0}\\{1}", sut.Dir, user);
            var di   = new DirectoryInfo(path);

            //DF_*がn個存在する
            var files = di.GetFiles("DF_*");

            Assert.AreEqual(files.Count(), n);
            //MF_*がn個存在する
            files = di.GetFiles("MF_*");
            Assert.AreEqual(files.Count(), n);
        }
Ejemplo n.º 2
0
        //Server及びMlから使用される
        //メールの保存(宛先はML以外であることが確定してから使用する)
        //テスト用のモックオブジェクト(TsMailSaveでSave()をオーバーライドできるようにvirtualにする
        virtual public bool Save(MailAddress from, MailAddress to, Mail orgMail, string host, Ip addr)
        {
            //Mailのヘッダ内容等を変更するので、この関数内だけの変更にとどめるため、テンポラリを作成する
            var mail = new Mail(); //orgMail.CreateClone();

            mail.Init2(orgMail.GetBytes());

            //ユニークなID文字列の生成
            var uidStr = string.Format("bjd.{0:D20}.{1:D3}", DateTime.Now.Ticks, _idCounter++);

            //日付文字列の生成
            //var date = Util.LocalTime2Str(DateTime.Now);
            //Receivedヘッダの追加
            mail.AddHeader("Received", _receivedHeader.Get(to, host, addr));

//            //Message-Idの追加
//            if (null == mail.GetHeader("Message-ID"))
//                mail.AddHeader("Message-ID", string.Format("<{0}@{1}>", uidStr, _domainList[0]));
//            //Fromの追加
//            if (null == mail.GetHeader("From"))
//                mail.AddHeader("From", string.Format("<{0}>", @from));
//            //Dateの追加
//            if (null == mail.GetHeader("Date"))
//                mail.AddHeader("Date", string.Format("{0}", date));

            //ローカル宛(若しくはローカルファイル)
            if (to.IsLocal(_domainList))
            {
                //ローカル保存の場合は、X-UIDLを追加する
                mail.AddHeader("X-UIDL", uidStr);

                //ヘッダを追加してサイズが変わるので、ここで初期化する
                var mailInfo = new MailInfo(uidStr, mail.Length, host, addr, from, to);

                if (to.IsFile())    //ローカルファイルの場合(直接ファイルにAppendする)
                {
                    if (!_localBox.Save(to, mail, mailInfo))
                    {
                        return(false);
                    }
                }
                else     //ローカルユーザの場合(メールボックスへSaveする)
                {
                    if (!_mailBox.Save(to.User, mail, mailInfo))
                    {
                        return(false);
                    }
                }
                _logger.Set(LogKind.Normal, null, 8, mailInfo.ToString());
            }
            else
            {
                //Toの追加
//                if (null == mail.GetHeader("To")) {
//                    mail.AddHeader("To", string.Format("<{0}>", to));
//                }

                //ヘッダを追加してサイズが変わるので、ここで初期化する
                var mailInfo = new MailInfo(uidStr, mail.Length, host, addr, from, to);
                if (!_mailQueue.Save(mail, mailInfo))
                {
                    _logger.Set(LogKind.Error, null, 9000059, mail.GetLastError());
                    return(false);
                }
                _logger.Set(LogKind.Normal, null, 9, mailInfo.ToString());
            }
            return(true);
        }