Beispiel #1
0
        public void SendResetEmail(EmailMessage email)
        {
            var transmission = new SparkPost.Transmission {
                Content = { TemplateId = ConfigurationManager.AppSettings["reset-password"] }, Options = new Options {
                    Transactional = true
                }
            };

            var recipient = new Recipient
            {
                Address = new Address {
                    Email = email.To
                },
                SubstitutionData =
                {
                    ["Usuario"]    = email.UserName,
                    ["ResetToken"] = email.Url,
                    ["Email"]      = email.To
                }
            };

            transmission.Recipients.Add(recipient);

            var client = new Client(ConfigurationManager.AppSettings["SparkPostApiKey"]);

            client.CustomSettings.SendingMode = SendingModes.Sync;
            var response = client.Transmissions.Send(transmission);

            var status = response.Result.StatusCode;
        }
Beispiel #2
0
        public void SendEmailInvoice(EmailMessage email)
        {
            var transmission = new SparkPost.Transmission {
                Content = { TemplateId = "invoce-tu-bus" }, Options = new Options {
                    Transactional = true
                }
            };

            var recipient = new Recipient
            {
                Address = new Address {
                    Email = email.To
                },
                SubstitutionData =
                {
                    ["DateInvoce"]  = DateTime.Now.ToLongDateString(),
                    ["Money"]       = email.Url,
                    ["Description"] = email.Message
                }
            };

            transmission.Recipients.Add(recipient);

            var client = new Client(ConfigurationManager.AppSettings["SparkPostApiKey"]);

            client.CustomSettings.SendingMode = SendingModes.Sync;
            var response = client.Transmissions.Send(transmission);

            var status = response.Result.StatusCode;
        }
        public async Task<SendTransmissionResponse> Send(Transmission transmission)
        {
            var request = new Request
            {
                Url = $"api/{client.Version}/transmissions",
                Method = "POST",
                Data = dataMapper.ToDictionary(transmission)
            };

            var response = await requestSender.Send(request);
            if (response.StatusCode != HttpStatusCode.OK) throw new ResponseException(response);

            var results = Jsonification.DeserializeObject<dynamic>(response.Content).results;
            return new SendTransmissionResponse()
            {
                Id = results.id,
                ReasonPhrase = response.ReasonPhrase,
                StatusCode = response.StatusCode,
                Content = response.Content,
                TotalAcceptedRecipients = results.total_accepted_recipients,
                TotalRejectedRecipients = results.total_rejected_recipients,
            };
        }
        public static void ProcessEmails(IDbService dbService, bool immediate)
        {
            var sendEmail = CloudConfigurationManager.GetSetting("send-email");
            var testEmail = CloudConfigurationManager.GetSetting("send-test-emails");
            var errorCount = 0;
            var successCount = 0;

            var log = Log.ForContext("jobid", Guid.NewGuid());

            //Don't execute unless email is turned on
            if (!string.Equals(sendEmail, "Yes", StringComparison.InvariantCultureIgnoreCase))
            {
                Console.WriteLine("No emails sent because send-email is not set to 'Yes'");
                log.Information("No emails sent because send-email is not set to 'Yes'");
                return;
            }

            using (var connection = dbService.GetConnection())
            {
                List<dynamic> pending = connection.Query(@"
                    select emailqueue.id as id, [subject], [body], students.email as sEmail, registrations.email as rEmail
                    from emailqueue
                        inner join Students on students.Id = EmailQueue.Student_Id
                        LEFT OUTER JOIN Registrations on registrations.id = EmailQueue.RegistrationId
                    where Pending = 1 and [immediate] = @immediate", new { immediate }).ToList();

                if (pending.Any())
                {
                    log.Information("{count} pending emails found", pending.Count);
                }

                foreach (var email in pending)
                {
                    var emailTransmission = new Transmission
                    {
                        Content = new Content
                        {
                            From =
                                new Address
                                {
                                    Email = "*****@*****.**",
                                    Name = "UCD Commencement Notification"
                                },
                            Subject = email.subject ,
                            Html = email.body
                        }
                    };

                    if (!string.IsNullOrWhiteSpace(testEmail))
                    {
                        emailTransmission.Recipients.Add(new Recipient { Address = new Address { Email = testEmail } });
                    }
                    else
                    {
                        emailTransmission.Recipients.Add(new Recipient { Address = new Address { Email = email.sEmail } });
                        if (!string.IsNullOrWhiteSpace(email.rEmail))
                        {
                            emailTransmission.Recipients.Add(new Recipient { Address = new Address { Email = email.rEmail } });
                        }
                    }
                    var client = new Client(SparkPostApiKey);
                    DateTime? sentDateTime = null;
                    try
                    {
                        client.Transmissions.Send(emailTransmission).Wait();
                        sentDateTime = DateTime.UtcNow; //TODO: Pacific time it?
                        successCount++;
                    }
                    catch (Exception ex)
                    {
                        //TODO: Logging.
                        Console.WriteLine(string.Format("Exception Detected: {0}", ex.GetBaseException()));
                        // Log.Error(ex, "There was a problem emailing {email}", email.sEmail);
                        //I don't think we care if there are a few problems...
                        errorCount++;
                        log.Error(ex, ex.GetBaseException().ToString());
                    }

                    if (string.IsNullOrWhiteSpace(testEmail))
                    {
                        using (var ts = connection.BeginTransaction())
                        {
                            //Update the db
                            connection.Execute(@"
                            UPDATE EmailQueue
                            SET
                                 [Pending] = 0
                                ,[SentDateTime] = @sentDateTime
                            WHERE id = @id", new { sentDateTime, id = email.id }, ts);

                            ts.Commit();
                        }
                    }

                }

                Console.WriteLine(string.Format("Sent: {0} Errors: {1}", successCount, errorCount));
                log.Information("Sent: {successCount} Errors: {errorCount}", successCount, errorCount);

            }
        }
        public async Task<JsonResult> SendTestEmail(string subject, string message)
        {



            var user = Repository.OfType<vUser>().Queryable.FirstOrDefault(a => a.LoginId == CurrentUser.Identity.Name);

            try
            {
                //Spark Email
                var emailTransmission = new Transmission
                {
                    Content = new Content
                    {
                        From =
                            new Address
                            {
                                Email = "*****@*****.**",
                                Name = "UCD Commencement Notification"
                            },
                        Subject = subject,
                        Html = message
                    }
                };
                emailTransmission.Recipients.Add(new Recipient { Address = new Address { Email = user.Email } });

                var client = new Client(CloudConfigurationManager.GetSetting("SparkPostApiKey"));
                await client.Transmissions.Send(emailTransmission);


                //To see example of using SMTP from the cloud, look in Admin/TestEmail

            }
            catch (Exception ex)
            {
                //return Json(ex.Message, JsonRequestBehavior.AllowGet); //To Debug exception
                return Json(false, JsonRequestBehavior.AllowGet);
            }

            return Json(true, JsonRequestBehavior.AllowGet);
        }