Esempio n. 1
0
        public async Task <ServiceResponse <INotificationResult> > NotifyAsync()
        {
            ServiceResponse <INotificationResult> result = new ServiceResponse <INotificationResult>();

            if (null == mailNotificationModel)
            {
                result.ObjectResult = null;
                result.Status       = new ServiceStatus {
                    Code = 2, Message = "MissingNotificationModel"
                };

                return(result);
            }

            SparkPostClient     client = new SparkPostClient();
            TransmissionContent transmissionContent = new TransmissionContent
            {
                ApiCredentials = mailNotificationModel.Credentials
            };

            Dictionary <string, string> headers = new Dictionary <string, string>();

            ParseDestinations(headers, DestinationType.CC);
            ParseDestinations(headers, DestinationType.BCC);

            var inlineImages = ParseAttachments(AttachmentType.Image);

            if (inlineImages.Status.Code == 2)
            {
                result.ObjectResult = null;
                result.Status       = inlineImages.Status;

                return(result);
            }

            var attachments = ParseAttachments(AttachmentType.Attachment);

            if (attachments.Status.Code == 2)
            {
                result.ObjectResult = null;
                result.Status       = attachments.Status;

                return(result);
            }

            transmissionContent.Content = new EmailContent
            {
                From = new EmailAddress
                {
                    Email = mailNotificationModel.From.Email.Trim(),
                    Name  = mailNotificationModel.From.Name.Trim(),
                },
                Subject           = mailNotificationModel.Subject.Trim(),
                Html              = mailNotificationModel.Text,
                EmailInlineImages = inlineImages.ObjectResult,
                EmailAttachments  = attachments.ObjectResult,
                Headers           = headers
            };

            ParseReplyTo(transmissionContent);

            var recipients = ParseTo();

            if (recipients.Status.Code == 0)
            {
                transmissionContent.Recipients = recipients.ObjectResult;
            }
            else
            {
                result.ObjectResult = null;
                result.Status       = recipients.Status;

                return(result);
            }

            var notificationResult = client.SendNotification(transmissionContent);

            notificationResult.Wait();

            result.Status       = notificationResult.Result.Status;
            result.ObjectResult = new SparkPostNotificationResult();
            (result.ObjectResult as SparkPostNotificationResult).NotificationResponse = notificationResult.Result;

            return(result);
        }