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