コード例 #1
0
ファイル: EmailSender.cs プロジェクト: KhaledSMQ/aml
        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);
            }
        }
コード例 #2
0
        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()}");
                }
            }
        }