public IEnumerable <A4AEmailRecord> SendMail(A4AEmailService service, A4AMessage msg, A4AUser source, IEnumerable <A4AExpert> targets) { var z = new A4AEmailRecord(); var client = new RestClient(); client.BaseUrl = new Uri(service.Uri); client.Authenticator = new RestSharp.Authenticators.HttpBasicAuthenticator(service.ApiUserName, service.ApiPassword); foreach (var c in targets) { RestRequest request = new RestRequest(); request.AddParameter("domain", service.Domain, ParameterType.UrlSegment); request.Resource = "{domain}/messages"; request.AddParameter("from", $"App4Answers <{source.UserName}@{service.Domain}>"); request.AddParameter("to", $"{c.FirstName} {c.LastName} <{c.Email}>"); request.AddParameter("subject", msg.Subject); request.AddParameter("html", msg.HtmlContent); request.AddParameter("text", msg.TextContent); request.Method = Method.POST; var result = client.Execute(request); var foo = new { message = "", id = "" }; var json = JsonConvert.DeserializeAnonymousType(result.Content, foo); var record = new A4AEmailRecord { MessageId = msg.MessageId, EmailFrom = source.Email, NameFrom = source.UserName, EmailTo = c.Email, NameTo = c.ExpertName, Status = A4AEmailStatus.Senttoservice, StatusMessage = json.message, ServiceMessageId = json.id, Subject = request.Parameters.First(x => x.Name == "subject").Value.ToString(), Timestamp = Timestamp.FromDateTime(DateTime.UtcNow) }; if (record.ServiceMessageId.StartsWith("<") && record.ServiceMessageId.EndsWith(">")) { record.ServiceMessageId = record.ServiceMessageId.Substring(1, record.ServiceMessageId.Length - 2); } yield return(record); } }
public void PollEmailState(Dictionary <string, DateTime> processedEvents) { var emailDefinition = GetEmailDefinition(); // don't keep track of any events that are before our purge time. var purgeTime = DateTime.Now.ToUniversalTime().AddMilliseconds(-emailDefinition.LookbackMilliseconds); foreach (var c in processedEvents.ToArray()) { if (c.Value < purgeTime) { processedEvents.Remove(c.Key); } } var emailEvents = sender.GetNextMailEvents(emailDefinition); SaveEmailDefinition(emailDefinition); if (emailEvents?.EmailEvents == null) { L.Trace("Found null email events or email events.Items ..."); return; } var incomingEmails = new List <A4AEmailRecord>(); foreach (var c in emailEvents.EmailEvents) { if (processedEvents.ContainsKey(c.id)) { continue; } processedEvents[c.id] = DateTime.Now.ToUniversalTime(); var emailRecord = c.ToRecord((x, y) => { return(""); }, emailDefinition.Domain); var savedRecord = Repository.AddObject(emailRecord); if (savedRecord.RecordType == A4AEmailRecordType.ExpertToUser && savedRecord.Status == A4AEmailStatus.Stored) { incomingEmails.Add(emailRecord); } } foreach (var c in incomingEmails) { try { var emailPostResponse = sender.EmailFromUrl(emailDefinition, c.Url); var message = new A4AMessage { HtmlContent = emailPostResponse.BodyHtml ?? "", TextContent = emailPostResponse.BodyPlain ?? "", Subject = emailPostResponse.Subject, Date = emailPostResponse.Date, EmailSender = c.EmailFrom }; message = Repository.AddObject(message); c.MessageId = message.MessageId; Repository.AddObject(c); } catch (Exception e) { L.Trace($"An exception - {e.Message} - occured processing incoming email event - {c.ToJSonString()}"); } } }