using System; using System.Collections.Generic; using System.Linq; using System.ServiceModel; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.Core; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; using BS.Shared; using BS.Shared.DataContracts; namespace BeWo.Service.ServiceImplementations { [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)] internal class MailServiceImp : IMailService { public void DeleteMail(long pEmployeeOid, MailDC pMail) { this.SetMailActivationType(pEmployeeOid, pMail, ActivationTypeId.Deleted); } public List GetIncomingMails(long pEmployeeOid) { try { var employee = DAOFactory.GenericDAO.LoadByID(pEmployeeOid); var incomingMail2Receiver = employee.IncomingMail2Receiver; return incomingMail2Receiver.Select(m2r => this.CreateMailDC(m2r)).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public List GetOutgoingMails(long pEmployeeOid) { try { var employee = DAOFactory.GenericDAO.LoadByID(pEmployeeOid); return employee.OutgoingMails.Select(mail => MapperFactory.MailDC_Mail.MapToNewDC(mail)).ToList(); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public void MoveMailToRecycleBin(long pEmployeeOid, MailDC pMail) { this.SetMailActivationType(pEmployeeOid, pMail, ActivationTypeId.InRecycleBin); } public long SendMail(MailDC pMail) { try { // SendEMails(pMail); // var lMail = MapperFactory.MailDC_Mail.MapToNewEntity(pMail); var lMail = new Mail(); lMail.Oid = pMail.MailOid; lMail.Message = pMail.Message; //var employee = DAOFactory.GenericDAO.LoadByID(pMail.Sender.Value); //lMail.Sender = employee.Person.FirstNameLastName; lMail.Subject = pMail.Subject; lMail.Version = pMail.MailVersion; lMail.Notice = pMail.Description; //lMail.ReceiverList = pMail.Receiver.Select(receiver => new Mail2Receiver { IsBlind = false, Mail = lMail, Oid = -1, Priority = pMail.Priority ?? Priority.normal, Receiver = receiver.EmployeeOid != null ? DAOFactory.GenericDAO.LoadByID(receiver.EmployeeOid.Value) : null, ReceiverEMailAddress = receiver.EmailAddress, Status = Status.unread }).ToList(); DAOFactory.GenericDAO.Insert(lMail); return lMail.Oid.Value; } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } public bool SendEMail(string subject, string body) { return Utils.SendMail(subject, body, null); } public bool SendEMailWithSender(string senderName, string senderEMail, string subject, string body) { if (subject == "FEHLERMELDUNG") { if (body.Contains("Kontaktdaten:")) { int start = body.IndexOf("Kontaktdaten:") + "Kontaktdaten:".Length; int stop = body.IndexOf("\n", start); if (stop > start) { String address = body.Substring(start, stop - start).Trim(); if (address.Contains("@")) { try { var addr = new System.Net.Mail.MailAddress(address); senderEMail = addr.Address; } catch { //Ignore } } } } if (body.Contains("PIN: *****")) { var pin = UserServiceImp.GeneratePIN(5); if (!String.IsNullOrEmpty(pin)) { body = body.Replace("PIN: *****", "PIN: " + pin); } } } return Utils.SendMail(subject, body, null, senderName, senderEMail); } private MailDC CreateMailDC(Mail2Receiver m2r) { MailDC mail = MapperFactory.MailDC_Mail.MapToNewDC(m2r.Mail); mail.Priority = m2r.Priority; mail.Status = m2r.Status; return mail; } private void SetMailActivationType(long pEmployeeOid, MailDC pMail, ActivationTypeId activationType) { try { //var mail2Receiver = pMail.Receiver.Where(r => r.EmployeeOid == pEmployeeOid).First(); //var mail2ReceiverDAO = DAOFactory.GenericDAO.LoadByID(mail2Receiver.Mail2ReceiverOid.Value); //ServiceLogic.SetActivationType(mail2ReceiverDAO.Oid.Value, mail2ReceiverDAO.Version.Value, activationType); } catch (Exception e) { throw Utils.CreateBeWoFaultException(e); } } // void SendEMails(MailDC mailDC) // { // SmtpClient client = new SmtpClient(); // client.DeliveryMethod = SmtpDeliveryMethod.Network; // client.Host = "beyondsoft.de"; // client.Credentials = new System.Net.NetworkCredential("default", "roh2ohYe"); // try // { // //// Attachement // //Attachment a = new Attachment(filename); // //System.Net.Mime.ContentDisposition disposition = a.ContentDisposition; // //disposition.CreationDate = System.IO.File.GetCreationTime(filename); // //disposition.ModificationDate = System.IO.File.GetLastWriteTime(filename); // //disposition.ReadDate = System.IO.File.GetLastAccessTime(filename); // //mail.Attachments.Add(a); // foreach (var receiver in mailDC.Receiver) // { // if (!string.IsNullOrEmpty(receiver.EmailAddress)) // { // var mail = new MailMessage(new MailAddress("bewo@beyondsoft.de", mailDC.SenderName), new MailAddress(receiver.EmailAddress)) // { // Subject = mailDC.Subject, // Body = mailDC.Message, // Priority = PriorityToMailPrority(mailDC.Priority) // }; // client.Send(mail); // } // } // } // //catch (SmtpFailedRecipientException ex) // //{ // // //... // //} // //catch (SmtpException ex) // //{ // // //... // //} // catch (Exception ex) // { // //... // throw ex; // } // } // private MailPriority PriorityToMailPrority(Priority? priority) // { // switch (priority ?? Priority.normal) // { // case Priority.high: // return MailPriority.High; // case Priority.normal: // return MailPriority.Normal; // case Priority.low: // return MailPriority.Low; // default: // return MailPriority.Normal; // } // } } }