Example #1
0
        public string Run(MailMergeTask mailMergeTask)
        {
            if (string.IsNullOrEmpty(mailMergeTask.From))
            {
                throw new ArgumentException("From is null");
            }
            if (string.IsNullOrEmpty(mailMergeTask.To))
            {
                throw new ArgumentException("To is null");
            }

            CreateDraftMail(mailMergeTask);

            var bodySendAttach = AttachToMail(mailMergeTask);

            return(SendMail(mailMergeTask, bodySendAttach));
        }
Example #2
0
        private void CreateDraftMail(MailMergeTask mailMergeTask)
        {
            var apiUrlCreate = string.Format("{0}mail/drafts/save.json", SetupInfo.WebApiBaseUrl);
            var bodyCreate   =
                string.Format(
                    MailMergeTask.MessageBodyFormat,
                    mailMergeTask.MessageId,
                    HttpUtility.UrlEncode(mailMergeTask.From),
                    HttpUtility.UrlEncode(mailMergeTask.Subject),
                    HttpUtility.UrlEncode(mailMergeTask.To),
                    HttpUtility.UrlEncode(mailMergeTask.Message));

            string responseCreateString = null; //TODO: Encoding.UTF8.GetString(Convert.FromBase64String(Api.GetApiResponse(apiUrlCreate, "PUT", bodyCreate)));
            var    responseCreate       = JObject.Parse(responseCreateString);

            if (responseCreate["statusCode"].Value <int>() != (int)HttpStatusCode.OK)
            {
                throw new Exception("Create draft failed: " + responseCreate["error"]["message"].Value <string>());
            }

            mailMergeTask.MessageId = responseCreate["response"]["id"].Value <int>();
            mailMergeTask.StreamId  = responseCreate["response"]["streamId"].Value <string>();
        }
Example #3
0
        private string SendMail(MailMergeTask mailMergeTask, string bodySendAttach)
        {
            var apiUrlSend = string.Format("{0}mail/messages/send.json", SetupInfo.WebApiBaseUrl);

            var bodySend =
                string.Format(
                    MailMergeTask.MessageBodyFormat,
                    mailMergeTask.MessageId,
                    HttpUtility.UrlEncode(mailMergeTask.From),
                    HttpUtility.UrlEncode(mailMergeTask.Subject),
                    HttpUtility.UrlEncode(mailMergeTask.To),
                    HttpUtility.UrlEncode(mailMergeTask.Message));

            bodySend += bodySendAttach;

            string responseSendString = null;//TODO: Encoding.UTF8.GetString(Convert.FromBase64String(Api.GetApiResponse(apiUrlSend, "PUT", bodySend)));
            var    responseSend       = JObject.Parse(responseSendString);

            if (responseSend["statusCode"].Value <int>() != (int)HttpStatusCode.OK)
            {
                throw new Exception("Create draft failed: " + responseSend["error"]["message"].Value <string>());
            }
            return(responseSend["response"].Value <string>());
        }
Example #4
0
        private string AttachToMail(MailMergeTask mailMergeTask)
        {
            if (mailMergeTask.Attach == null)
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(mailMergeTask.AttachTitle))
            {
                mailMergeTask.AttachTitle = "attach.pdf";
            }

            var apiUrlAttach = string.Format("{0}mail/messages/attachment/add?id_message={1}&name={2}",
                                             SetupInfo.WebApiBaseUrl,
                                             mailMergeTask.MessageId,
                                             mailMergeTask.AttachTitle);

            var request = (HttpWebRequest)WebRequest.Create(BaseCommonLinkUtility.GetFullAbsolutePath(apiUrlAttach));

            request.Method        = "POST";
            request.ContentType   = MimeMapping.GetMimeMapping(mailMergeTask.AttachTitle);
            request.ContentLength = mailMergeTask.Attach.Length;
            request.Headers.Add("Authorization", SecurityContext.AuthenticateMe(SecurityContext.CurrentAccount.ID));

            const int bufferSize = 2048;
            var       buffer     = new byte[bufferSize];
            int       readed;

            while ((readed = mailMergeTask.Attach.Read(buffer, 0, bufferSize)) > 0)
            {
                request.GetRequestStream().Write(buffer, 0, readed);
            }

            // hack. http://ubuntuforums.org/showthread.php?t=1841740
            if (WorkContext.IsMono)
            {
                ServicePointManager.ServerCertificateValidationCallback += (s, ce, ca, p) => true;
            }

            string responseAttachString;

            using (var response = request.GetResponse())
                using (var stream = response.GetResponseStream())
                {
                    if (stream == null)
                    {
                        throw new WebException("Could not get an answer");
                    }
                    using var reader     = new StreamReader(stream);
                    responseAttachString = reader.ReadToEnd();
                }

            var responseAttach = JObject.Parse(responseAttachString);

            if (responseAttach["statusCode"].Value <int>() != (int)HttpStatusCode.Created)
            {
                throw new Exception("Attach failed: " + responseAttach["error"]["message"].Value <string>());
            }

            var bodySendAttach =
                "&attachments%5B0%5D%5BfileId%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["fileId"].Value <string>())
                + "&attachments%5B0%5D%5BfileName%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["fileName"].Value <string>())
                + "&attachments%5B0%5D%5Bsize%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["size"].Value <string>())
                + "&attachments%5B0%5D%5BcontentType%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["contentType"].Value <string>())
                + "&attachments%5B0%5D%5BfileNumber%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["fileNumber"].Value <string>())
                + "&attachments%5B0%5D%5BstoredName%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["storedName"].Value <string>())
                + "&attachments%5B0%5D%5BstreamId%5D=" + HttpUtility.UrlEncode(responseAttach["response"]["streamId"].Value <string>())
            ;

            return(bodySendAttach);
        }