Beispiel #1
0
        public void Dataの動作確認_Bodyの確認_最後が改行で終わらない(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();
            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n123"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2 = _testServer.GetMf("user1")[0];
            var actual = mail2.GetBody().Length;
            var expected = mail1.GetBody().Length + 2;//\r\nが追加される
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #2
0
        //Server及びMlから使用される
        //メールの保存(宛先はML以外であることが確定してから使用する)
        //テスト用のモックオブジェクト(TsMailSaveでSave()をオーバーライドできるようにvirtualにする
        public virtual 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;
        }
Beispiel #3
0
        public OneMail(String owner,String fileName)
        {
            Owner = owner;
            _mailInfo = new MailInfo(fileName);
            fileName = fileName.Replace("\\DF_","\\MF_");

            _mail = new Mail();
            if (File.Exists(fileName)) {
                _mail.Init2(Encoding.ASCII.GetBytes(File.ReadAllText(fileName)));
            }
        }
Beispiel #4
0
        public void Dataの動作確認_Bodyの確認_ドットのみの行を含む(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();
            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n.\r\n"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2 = _testServer.GetMf("user1")[0];
            Assert.That(mail2.GetBody(), Is.EqualTo(mail1.GetBody()));

            //tearDown
            sut.Dispose();
        }
Beispiel #5
0
        public bool Retr(int n, Mail mail)
        {
            //切断中の場合はエラー
            if (Status != PopClientStatus.Transaction) {
                SetLastError("Retr() Status != Transaction");
                return false;
            }
            //RETR送信
            if (!SendCmd(string.Format("RETR {0}",n+1))) {
                return false;
            }
            //+OK受信
            if (!RecvStatus()) {
                return false;
            }
            //.までの行を受信
            var buf = RecvData();
            if (buf == null) {
                return false;
            }
            var tmp = new byte[buf.Length-3];
            Buffer.BlockCopy(buf,0,tmp,0,buf.Length-3);
            mail.Init2(tmp);

            return true;
        }