public void Appendによるヘッダの追加() { //setUp var appned = new Dat(new CtrlType[] { CtrlType.TextBox, CtrlType.TextBox }); appned.Add(true, "tag2\tzzz"); var sut = new ChangeHeader(null, appned); var mail = new Mail(); var expected = "zzz"; //exercise sut.Exec(mail, new Logger()); var actual = mail.GetHeader("tag2"); //varify Assert.That(actual, Is.EqualTo(expected)); }
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)); }
//RETRの後のメールの保存が完成したら、Job2をこちらに乗せ換えられる public bool Job(Logger logger,DateTime now,ILife iLife) { Debug.Assert(logger != null, "logger != null"); var fetchDb = new FetchDb(_kernel.ProgDir(), _oneFetch.Name); var remoteUidList = new List<String>(); var getList = new List<int>();//取得するメールのリスト var delList = new List<int>();//削除するメールのリスト //受信間隔を過ぎたかどうかの判断 if (_dt.AddMinutes(_oneFetch.Interval) > now){ return false; } logger.Set(LogKind.Normal, null, 1, _oneFetch.ToString()); if (_oneFetch.Ip == null) { logger.Set(LogKind.Error, null, 2, ""); return false; } var popClient = new PopClient(_kernel,_oneFetch.Ip,_oneFetch.Port,_timeout,iLife); //接続 if (!popClient.Connect()){ logger.Set(LogKind.Error, null, 3, popClient.GetLastError()); return false; } //ログイン if (!popClient.Login(_oneFetch.User, _oneFetch.Pass)){ logger.Set(LogKind.Error, null, 4, popClient.GetLastError()); return false; } //UID var lines = new List<String>(); if (!popClient.Uidl(lines)) { logger.Set(LogKind.Error, null, 5, popClient.GetLastError()); return false; } for (int i=0;i<lines.Count;i++){ var tmp = lines[i].Split(' '); if (tmp.Length == 2){ var uid = tmp[1]; remoteUidList.Add(uid); //既に受信が完了しているかどうかデータベースで確認する if (fetchDb.IndexOf(uid) == -1) { //存在しない場合 getList.Add(i);//受信対象とする } } } if (_oneFetch.Synchronize == 0) { //サーバに残す for (var i = 0; i < remoteUidList.Count; i++) { if (_oneFetch.KeepTime != 0){ //保存期間0の時は、削除しない //保存期間が過ぎているかどうかを確認する if (fetchDb.IsPast(remoteUidList[i], _oneFetch.KeepTime * 60)) { //サーバに残す時間(分) delList.Add(i); } } } } else if (_oneFetch.Synchronize == 1) { //メールボックスと同期する //メールボックスの状態を取得する var localUidList = new List<string>(); var folder = string.Format("{0}\\{1}", _kernel.MailBox.Dir, _oneFetch.LocalUser); foreach (var fileName in Directory.GetFiles(folder, "DF_*")) { var mailInfo = new MailInfo(fileName); localUidList.Add(mailInfo.Uid); } //メールボックスに存在しない場合、削除対象になる for (var i = 0; i < remoteUidList.Count; i++) { if (localUidList.IndexOf(remoteUidList[i]) == -1) { delList.Add(i); } } } else if (_oneFetch.Synchronize == 2) { //サーバから削除 //受信完了リストに存在する場合、削除対象になる for (var i = 0; i < remoteUidList.Count; i++) { if (fetchDb.IndexOf(remoteUidList[i]) != -1) { delList.Add(i); } } } //RETR for (int i = 0; i < getList.Count;i++ ){ var mail = new Mail(); if (!popClient.Retr(getList[i], mail)) { logger.Set(LogKind.Error, null, 6, popClient.GetLastError()); return false; } //Ver5.9.8 var fromStr = mail.GetHeader("From"); if (fromStr == null){ fromStr = string.Format("{0}@{1}_{2}", _oneFetch.User, _oneFetch.Host, _oneFetch.Port); } var from = new MailAddress(fromStr); mail.ConvertHeader("X-UIDL", remoteUidList[i]); var remoteAddr = _oneFetch.Ip; var remoteHost = _oneFetch.Host; var rcptList = new List<MailAddress>(); rcptList.Add(new MailAddress(_oneFetch.LocalUser, _domainName)); if (_mailSave != null){ if (!_mailSave.Save(from, rcptList, mail, remoteHost, remoteAddr)){ return false; } } fetchDb.Add(remoteUidList[i]); } //DELE for (int i = 0; i < delList.Count;i++ ){ if (!popClient.Dele(delList[i])){ logger.Set(LogKind.Error, null, 7, popClient.GetLastError()); return false; } fetchDb.Del(remoteUidList[i]); } //QUIT if (!popClient.Quit()){ logger.Set(LogKind.Error, null, 5, popClient.GetLastError()); return false; } fetchDb.Save(); _dt = DateTime.Now;//最終処理時刻の更新 return true; }
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)); }
//折り返しメールのためのToヘッダの作成 string ReturnTo(Mail mail, MlEnvelope mlEnvelope) { //元メールのFromヘッダを取得する //無い場合は、mlEmvelope.Fromからセットする var to = mail.GetHeader("from") ?? mlEnvelope.From.ToString(); return to; }
//投稿 public bool Post(Mail mail, MlEnvelope mlEnvelope) { //var no = mlDb.IncNo(mlAddr.Name);//インクリメントした記事番号の取得 var incNo = _mlDb.Count() + 1;//インクリメントした記事番号の取得 //記事メールの編集 //Subject:の変更 mail.ConvertHeader("subject", _mlSubject.Get(mail.GetHeader("subject"), incNo)); //Reply-To:の追加 mail.ConvertHeader("Reply-To", string.Format("\"{0}\"<{1}>", _mlAddr.Name, _mlAddr.Post)); //List-Id:の追加 mail.ConvertHeader("List-Id", string.Format("{0}.{1}", _mlAddr.Name, _mlAddr.DomainList[0])); //List-Software:の追加 mail.ConvertHeader("List-Software", string.Format("{0}", Define.ApplicationName())); //List-Post:の追加 mail.ConvertHeader("List-Post", string.Format("<mailto:{0}>", _mlAddr.Post)); //List-Owner:の追加 mail.ConvertHeader("List-Owner", string.Format("<mailto:{0}>", _mlAddr.Admin)); //List-Help:の追加 mail.ConvertHeader("List-Help", string.Format("<mailto:{0}?body=help>", _mlAddr.Ctrl)); //List-Unsubscribe:の追加 mail.ConvertHeader("List-Unsubscribe", string.Format("<mailto:{0}?body=unsubscribe>", _mlAddr.Ctrl)); //ライブラリへの保存 _mlDb.Save(mail); //各メンバーへの配信 foreach (MlOneUser to in _mlUserList) { if (to.Enable && to.IsReader) {//「配信する」のみが対象となる if (!_mlSender.Send(mlEnvelope.ChangeTo(to.MailAddress), mail)) { //配信に失敗したメールを管理者に転送する var subject = string.Format("DELIVERY ERROR article to {0} ({1} ML)", to, _mlAddr.Name); return AttachToAmdin(mail, subject, mlEnvelope); } } } return true; }
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)); }