public TsMail(string from, string to, string bodyStr) { Mail = new Mail(); Mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了) var body = Encoding.ASCII.GetBytes(bodyStr); Mail.AppendLine(body); Mail.AddHeader("from", from); Mail.AddHeader("to", to); const string host = "TEST"; var addr = new Ip("10.0.0.1"); MlEnvelope = new MlEnvelope(CreateMailAddress(from), CreateMailAddress(to), host, addr); }
//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 void Relpaceによるヘッダの置き換え2() { //setUp var replace = new Dat(new CtrlType[] { CtrlType.TextBox, CtrlType.TextBox }); replace.Add(true, "ABC\tBBB"); var sut = new ChangeHeader(replace, null); var mail = new Mail(); mail.AddHeader("tag1", "ABC123"); mail.AddHeader("tag2", "DEF123"); mail.AddHeader("tag3", "GHI123"); var expected = "BBB123"; //exercise sut.Exec(mail, new Logger()); var actual = mail.GetHeader("tag1"); //varify Assert.That(actual, Is.EqualTo(expected)); }
public void Relpaceによるヘッダの置き換え() { //setUp var replace = new Dat(new CtrlType[]{CtrlType.TextBox, CtrlType.TextBox}); replace.Add(true, "ABC\tXYZ"); var sut = new ChangeHeader(replace, null); var mail = new Mail(); mail.AddHeader("tag1", "ABC123"); mail.AddHeader("tag2", "DEF123"); mail.AddHeader("tag3", "GHI123"); var expected = "tag1: XYZ123\r\n"; //exercise sut.Exec(mail, new Logger()); var actual = Encoding.ASCII.GetString(mail.GetBytes()).Substring(0, 14); //varify Assert.That(actual, Is.EqualTo(expected)); }
//変換と追加 public void Exec(Mail mail,Logger logger) { Debug.Assert(logger != null, "logger != null"); //ヘッダ変換 foreach (var a in _replace){ if (mail.RegexHeader(a.Key,a.Value)){ logger.Set(LogKind.Normal, null, 16, string.Format("{0} -> {1}", a.Key,a.Value)); } } //ヘッダの追加 foreach (var a in _append){ mail.AddHeader(a.Key, a.Value); logger.Set(LogKind.Normal, null, 17, string.Format("{0}: {1}", a.Key, a.Value)); } }
//メールを添付する public Mail Attach(string subject, Mail orgMail) { var mail = new Mail(); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了) //ヘッダ作成 mail.AddHeader("subject", subject); //本文作成 mail.AppendLine(Encoding.ASCII.GetBytes(subject + "\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("Original mail as follows:\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n")); //オリジナルメールの添付 var body = Inet.GetLines(orgMail.GetBytes()); foreach (var buf in body) { mail.AppendLine(Encoding.ASCII.GetBytes(" "));//行頭に空白を追加 mail.AppendLine(buf); } return mail; }
//元メールを添付して管理者へ送る public bool AttachToAmdin(Mail orgMail, string subject, MlEnvelope mlEnvelope) { //メール生成 var mail = new Mail(); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了) mail.AddHeader("subject", subject); mail.AppendLine(Encoding.ASCII.GetBytes(subject + "\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("Original mail as follows:\r\n")); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n")); //オリジナルメールの添付 var body = Inet.GetLines(orgMail.GetBytes()); foreach (var buf in body) { mail.AppendLine(Encoding.ASCII.GetBytes(" "));//行頭に空白を追加 mail.AppendLine(buf); } //宛先設定 from<->To from = mailDaemon mail.ConvertHeader("from", _mlAddr.Admin.ToString()); //配送 return SendAllAdmin(mlEnvelope.ChangeFrom(_mlAddr.Admin), mail); }
Mail Create(string subject, string contentType, byte[] body) { var mail = new Mail(); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了) //ヘッダ作成 mail.AddHeader("subject", subject); mail.AddHeader("Content-Type", contentType); mail.AddHeader("from", _mlAddr.Admin.ToString()); mail.AddHeader("date", Util.LocalTime2Str(DateTime.Now));//日付 //本文作成 mail.AppendLine(body); return mail; }
public void Relpaceによるヘッダの置き換え3() { //setUp var replace = new Dat(new CtrlType[] { CtrlType.TextBox, CtrlType.TextBox }); replace.Add(true, "EFGH\tWXYZ"); var sut = new ChangeHeader(replace, null); var mail = new Mail(); mail.AddHeader("To", "\"ABCD\" <****@******>"); mail.AddHeader("From", "\"EFGH\" <****@******>"); mail.AddHeader("Subject", "test"); var expected = "\"WXYZ\" <****@******>"; //exercise sut.Exec(mail, new Logger()); var actual = mail.GetHeader("From"); //varify Assert.That(actual, Is.EqualTo(expected)); }
public void Relpaceによるヘッダの置き換え4() { //setUp var replace = new Dat(new CtrlType[] { CtrlType.TextBox, CtrlType.TextBox }); replace.Add(true, "User-Agent:.*\tUser-Agent:Henteko Mailer 09.87.12"); var sut = new ChangeHeader(replace, null); var mail = new Mail(); mail.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 5.1; rv:17.0) Gecko/20130801 Thunderbird/17.0.8"); var expected = "Henteko Mailer 09.87.12"; //exercise sut.Exec(mail, new Logger()); var actual = mail.GetHeader("User-Agent"); //varify Assert.That(actual, Is.EqualTo(expected)); }
Mail Create(string subject, string contentType, byte[] body) { var mail = new Mail(); mail.AppendLine(Encoding.ASCII.GetBytes("\r\n"));//区切り行(ヘッダ終了) //ヘッダ作成 mail.AddHeader("subject", subject); mail.AddHeader("Content-Type", contentType); //本文作成 mail.AppendLine(body); return mail; }
public void Readによるn通目の読み込み(int n) { //setUp var max = 10; var threadSpan = 0; //最小経過時間 var mail = new Mail(); var expected = string.Format("{0}", n); mail.AddHeader("tag",expected); var mailInfo = CreateMailInfo(); for (int i = 0; i < max; i++) { sut.Save(mail, mailInfo); } var list = sut.GetList(max, threadSpan); //exerceise sut.Read(list[n].MailInfo.FileName, ref mail); var actual = mail.GetHeader("tag"); //verify Assert.That(actual, Is.EqualTo(expected)); }