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