Пример #1
0
        public bool Save(string user, Mail mail, MailInfo mailInfo)
        {
            //Ver_Ml
            if (!IsUser(user))
            {
                _log.Set(LogKind.Error, null, 9000047, string.Format("[{0}] {1}", user, mailInfo));
                return(false);
            }

            //�t�H���_�쐬
            var folder = string.Format("{0}\\{1}", Dir, user);

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
            }

            //�t�@�C��������
            var name   = CreateFileName();
            var mfName = string.Format("{0}\\MF_{1}", folder, name);
            var dfName = string.Format("{0}\\DF_{1}", folder, name);

            //�t�@�C���ۑ�
            var success = false;

            try{
                if (mail.Save(mfName))
                {
                    if (mailInfo.Save(dfName))
                    {
                        success = true;
                    }
                }
                else
                {
                    _log.Set(LogKind.Error, null, 9000059, mail.GetLastError());
                }
            }catch (Exception) {
                ;
            }
            //���s�����ꍇ�́A�쐬�r���̃t�@�C����S���폜
            if (!success)
            {
                if (File.Exists(mfName))
                {
                    File.Delete(mfName);
                }
                if (File.Exists(dfName))
                {
                    File.Delete(dfName);
                }
                return(false);
            }
            //_logger.Set(LogKind.Normal, null, 8, mailInfo.ToString());

            return(true);
        }
Пример #2
0
 public bool Save(MailAddress to,Mail mail,MailInfo mailInfo)
 {
     if (mail.Append(to.ToString())) {
         if (_logger != null){
             _logger.Set(LogKind.Normal, null, 21, string.Format("[{0}] {1}", to.User, mailInfo));
         }
     } else {
         _logger.Set(LogKind.Error, null, 9000059, mail.GetLastError());
         _logger.Set(LogKind.Error, null, 22, string.Format("[{0}] {1}", to.User, mailInfo));
     }
     return true;
 }
Пример #3
0
        public bool Save(string user, Mail mail, MailInfo mailInfo)
        {
            //Ver_Ml
            if (!IsUser(user)){
                _log.Set(LogKind.Error, null, 9000047, string.Format("[{0}] {1}", user, mailInfo));
                return false;
            }

            //�t�H���_�쐬
            var folder = string.Format("{0}\\{1}", Dir, user);
            if (!Directory.Exists(folder)){
                Directory.CreateDirectory(folder);
            }

            //�t�@�C��������
            var name = CreateFileName();
            var mfName = string.Format("{0}\\MF_{1}", folder, name);
            var dfName = string.Format("{0}\\DF_{1}", folder, name);

            //�t�@�C���ۑ�
            var success = false;
            try{
                if (mail.Save(mfName)){
                    if (mailInfo.Save(dfName)){
                        success = true;
                    }
                } else{
                    _log.Set(LogKind.Error, null, 9000059, mail.GetLastError());
                }
            }catch (Exception){
                ;
            }
            //���s�����ꍇ�́A�쐬�r���̃t�@�C����S���폜
            if (!success){
                if (File.Exists(mfName)) {
                    File.Delete(mfName);
                }
                if (File.Exists(dfName)) {
                    File.Delete(dfName);
                }
                return false;
            }
            //_logger.Set(LogKind.Normal, null, 8, mailInfo.ToString());

            return true;
        }
Пример #4
0
        public bool Save(Mail mail)
        {
            //ディレクトリが存在しない場合は作成する
            if (!Directory.Exists(_dir)) {
                Directory.CreateDirectory(_dir);
            }

            var fileName = MailFile(Count(true));//インクリメントした連番を取得する
            if (!mail.Save(fileName)) {
                _logger.Set(LogKind.Error, null, 9000059, mail.GetLastError());
                _logger.Set(LogKind.Error, null, 33, fileName);
                return false;
            }
            return true;
        }
Пример #5
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;
        }