Ejemplo n.º 1
0
        public override void ExecuteCommand(MailSession session, StringRequestInfo requestInfo)
        {
            MailTable         mailTable         = JsonConvert.DeserializeObject <MailTable>(requestInfo.Body);
            MailServerManager mailServerManager = new MailServerManager();

            mailTable.MailFileName = mailServerManager.GetNewFileName(mailTable.MailFileName);

            if (!MailServerManager.OnlineUserDic.ContainsKey(mailTable.ReceiverIP))//不包含,返回错误
            {
                session.TrySend(MailServerCommand.SendMailResult.ToString() + " " + JsonConvert.SerializeObject(new { Result = false, Message = string.Format("找不到收件人{0}", mailTable.Receiver) }) + "\r\n");
                return;
            }

            //将邮件信息存储到服务器上
            string        basePath          = AppDomain.CurrentDomain.BaseDirectory;
            string        mailDirectory     = Path.Combine(basePath, "MailCache");
            string        ReceiverDirectory = Path.Combine(mailDirectory, mailTable.ReceiverIP);
            string        filePath          = Path.Combine(ReceiverDirectory, mailTable.MailFileName);
            DirectoryInfo di = Directory.CreateDirectory(ReceiverDirectory);

            using (FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                fs.Write(mailTable.MailFile, 0, mailTable.MailFile.Length);
            }
            try
            {
                MailTableRepository mailTableRepository = new MailTableRepository();
                mailTableRepository.Insert(mailTable);
            }
            catch (Exception ex)
            {
                LogServerManager.AddErrLog(LogServerManager.ErrLogType.DBErr, ex);
            }
            //清空发送的附件缓存
            Array.Clear(mailTable.MailFile, 0, mailTable.MailFile.Length);
            //转发邮件给目标用户
            foreach (var item in session.AppServer.GetSessions(_ => _.RemoteEndPoint.Address.ToString() == mailTable.ReceiverIP))
            {
                string msg = MailServerCommand.ReceiveMail + " " + JsonConvert.SerializeObject(mailTable) + "\r\n";
                item.TrySend(msg);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 将邮件信息存储到服务器上
        /// </summary>
        /// <param name="mailTable"></param>
        public void SaveMail(MailTable mailTable)
        {
            try
            {
                if (!string.IsNullOrEmpty(mailTable.MailFileName))
                {
                    SaveMailFile(mailTable);
                }

                if (mailTable.ReceiverDic.Count == 1)
                {
                    MailTableRepository mailTableRepository = new MailTableRepository();
                    mailTableRepository.Insert(mailTable);
                }
                else if (mailTable.ReceiverDic.Count > 1)//群发,拆分成多条保存
                {
                    foreach (var item in mailTable.ReceiverDic)
                    {
                        MailTable newMailTable = new MailTable();
                        newMailTable.ReceiverIP          = item.Key;
                        newMailTable.Receiver            = item.Value;
                        newMailTable.SenderIP            = mailTable.SenderIP;
                        newMailTable.Sender              = mailTable.Sender;
                        newMailTable.SendTime            = mailTable.SendTime;
                        newMailTable.MailTitle           = mailTable.MailTitle;
                        newMailTable.MailContent         = mailTable.MailContent;
                        newMailTable.MailFileName        = mailTable.MailFileName;
                        newMailTable.MailFileStorageName = mailTable.MailFileStorageName;
                        MailTableRepository mailTableRepository = new MailTableRepository();
                        mailTableRepository.Insert(newMailTable);
                    }
                }
            }
            catch (Exception ex)
            {
                LogServerManager.AddErrLog(ErrLogType.InnerErr, ex);
                throw ex;
            }
        }