コード例 #1
0
ファイル: FileHelper.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Gets the full navigate URL.
        /// </summary>
        /// <param name="id">The identifier.</param>
        /// <param name="systemOption">The system option.</param>
        /// <returns>System.String.</returns>
        public static string GetFullNavigateUrl(int id, ISystemOptionsInfo systemOption)
        {
            if (systemOption != null && Uri.IsWellFormedUriString(systemOption.FileUploadURI, UriKind.Absolute))
            {
                var uri = new Uri(systemOption.FileUploadURI);
                var result = new StringBuilder();

                result.AppendFormat(CultureInfo.InvariantCulture, "{0}://{1}", uri.Scheme, uri.Host);

                if (!uri.IsDefaultPort)
                {
                    result.AppendFormat(CultureInfo.InvariantCulture, ":{0}", uri.Port);
                }

                result.Append('/');

                for (var i = 1; i < uri.Segments.Length - 1; ++i)
                {
                    result.Append(uri.Segments[i]);
                }

                result.AppendFormat(CultureInfo.InvariantCulture, "DocHandler.ashx?FileId={0}", id);

                return result.ToString();
            }

            return string.Empty;
        }
コード例 #2
0
ファイル: FileHelper.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Gets the navigation URL.
        /// </summary>
        /// <param name="systemOption">The system option.</param>
        /// <returns>System.String.</returns>
        public static string GetNavigationUrl(ISystemOptionsInfo systemOption)
        {
            if (systemOption != null && Uri.IsWellFormedUriString(systemOption.FileUploadURI, UriKind.Absolute))
            {
                var uri = new Uri(systemOption.FileUploadURI);
                return uri.Scheme + @"://" + uri.Host + @":" + uri.Port + @"/";
            }

            return String.Empty;
        }
コード例 #3
0
ファイル: FileManager.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Uploads the file.
        /// </summary>
        /// <param name="fileName">Name of the file.</param>
        /// <param name="data">The data.</param>
        /// <param name="sysOptions">The system options.</param>
        private static void UploadFile(string fileName, Stream data, ISystemOptionsInfo sysOptions)
        {
            if (!Uri.IsWellFormedUriString(sysOptions.FileProcessorURI, UriKind.Absolute))
                return;

            var uri = new Uri(string.Format(CultureInfo.InvariantCulture, "{0}?FileName={1}", sysOptions.FileProcessorURI, fileName));
            using (var c = new WebClient())
            {
                c.OpenWriteCompleted += (s1, e) =>
                    {
                        var buffer = new byte[4096];
                        int bytesRead;
                        while ((bytesRead = data.Read(buffer, 0, buffer.Length)) != 0)
                            e.Result.Write(buffer, 0, bytesRead);

                        e.Result.Close();
                        data.Dispose();
                    };

                c.OpenWriteAsync(uri);
            }
        }
コード例 #4
0
ファイル: FileManager.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Downloads the document.
        /// </summary>
        /// <param name="fileName">The name of file.</param>
        /// <param name="sysOptions">The system options.</param>
        /// <param name="action">The action.</param>
        private void DownloadDocument(string fileName, ISystemOptionsInfo sysOptions, Action<MemoryStream> action)
        {
            var url = string.Format(CultureInfo.InvariantCulture, "{0}?FileName={1}&BypassAuth=true", sysOptions.FileUploadURI.Replace("FileUploadHandler", "DocHandler"), fileName);
            try
            {
                var webRequest = WebRequest.Create(url);
                var request = webRequest as HttpWebRequest;
                if (request != null)
                {
                    using (var response = webRequest.GetResponse())
                    using (var stream = response.GetResponseStream())
                    {
                        if (stream == null)
                            return;

                        using (var ms = new MemoryStream())
                        {
                            var buffer = new byte[4096];
                            int bytesRead;
                            while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
                                ms.Write(buffer, 0, bytesRead);

                            if (action != null)
                                action(ms);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Logger.Log(LogSeverity.Error, "FileManager.UpdatePdf", string.Format(CultureInfo.InvariantCulture, "DocHandler url: {0}{1}{2}", url, Environment.NewLine, e));
            }
        }
コード例 #5
0
ファイル: FileManager.cs プロジェクト: mparsin/Elements
        private void GeneratePdfFromReport(IEditableRoot item, IFileProcess file, ISystemOptionsInfo sysOptions)
        {
            if (string.IsNullOrEmpty(file.ReportName)) return;

            var ms = GetReportStream(item, file.ReportName);
            UploadFile(file.FileName, ms, sysOptions);
        }
コード例 #6
0
ファイル: FileHelper.cs プロジェクト: mparsin/Elements
        /// <summary>
        /// Gets the full navigate URL.
        /// </summary>
        /// <param name="fileName">
        /// The file name.
        /// </param>
        /// <param name="systemOption">
        /// The system option.
        /// </param>
        /// <returns>
        /// The file URL.
        /// </returns>
        public static string GetFullNavigateUrl(string fileName, ISystemOptionsInfo systemOption)
        {
            if (systemOption != null && Uri.IsWellFormedUriString(systemOption.FileUploadURI, UriKind.Absolute))
            {
                var uri = new Uri(systemOption.FileUploadURI);
                var segments = new StringBuilder();
                if (uri.Segments.Length > 2)
                {
                    for (var index = 0; index < uri.Segments.Length - 1; index++)
                    {
                        var s = uri.Segments[index];
                        segments.Append(s);
                    }
                }

                return string.Format(
                    CultureInfo.InvariantCulture,
                    "{0}://{1}:{2}/{3}DocHandler.ashx?FileName={4}",
                    uri.Scheme,
                    uri.Host,
                    uri.Port,
                    segments,
                    fileName);
            }

            return string.Empty;
        }
コード例 #7
0
ファイル: FileHelper.cs プロジェクト: mparsin/Elements
 /// <summary>
 /// To the full navigate URL.
 /// </summary>
 /// <param name="id">The identifier.</param>
 /// <param name="systemOption">The system option.</param>
 /// <returns>System.String.</returns>
 public static string ToFullNavigateUrl(this int id, ISystemOptionsInfo systemOption)
 {
     return GetFullNavigateUrl(id, systemOption);
 }
コード例 #8
0
ファイル: EmailManager.cs プロジェクト: mparsin/Elements
        private static MailMessage CreateMailMessage(EmailEntity email, ISystemOptionsInfo systemOptions)
        {
            MailMessage mailMessage = null;
            AlternateView bodyView = null;

            try
            {
                mailMessage = new MailMessage();
                mailMessage.From = !string.IsNullOrEmpty(email.From) ? new MailAddress(email.From) : new MailAddress(systemOptions.EmailFromAddress);

                foreach (var address in email.ToList)
                    mailMessage.To.Add(address);

                foreach (var address in email.CCList.Where(address => !string.IsNullOrEmpty(address)))
                    mailMessage.CC.Add(address);

                foreach (var address in email.BCCList)
                    mailMessage.Bcc.Add(address);

                mailMessage.SubjectEncoding = Encoding.UTF8;
                mailMessage.Subject = email.Subject;

                mailMessage.BodyEncoding = Encoding.UTF8;
                bodyView = AlternateView.CreateAlternateViewFromString(email.Body, Encoding.UTF8, email.IsHtml ? MediaTypeNames.Text.Html : MediaTypeNames.Text.Plain);
                bodyView.TransferEncoding = TransferEncoding.SevenBit;

                mailMessage.IsBodyHtml = email.IsHtml;

                bodyView.LinkedResources.AddRange(email.LinkedResources.Select(CreateLinkedResource));
                mailMessage.AlternateViews.Add(bodyView);

                foreach (var attachment in email.AttachmentPaths)
                    mailMessage.Attachments.Add(new Attachment(attachment));

                return mailMessage;
            }
            catch (Exception)
            {
                if (bodyView != null)
                    bodyView.Dispose();

                if (mailMessage != null)
                    mailMessage.Dispose();

                throw;
            }
        }
コード例 #9
0
ファイル: EmailManager.cs プロジェクト: mparsin/Elements
        /// <summary> Sends an email asynchronously. </summary>
        /// <param name="email"> The email. </param>
        /// <param name="processName"> The process name. </param>
        /// <param name="itemId"> The item id. </param>
        /// <param name="sender">Action or User</param>
        /// <param name="sysOptions"> The system options. </param>
        /// <returns> The asynchronous task. </returns>
        /// <exception cref="ArgumentNullException">
        /// The <paramref name="email"/> parameter is null.
        /// </exception>
        public async Task SendEmailAsync(EmailEntity email, string processName, int itemId, string sender, ISystemOptionsInfo sysOptions)
        {
            if (email == null)
                throw new ArgumentNullException("email");

            var systemOptions = sysOptions ?? SystemOptionsInfo.GetSystemOptionsInfo();
            if (systemOptions == null)
                throw new SystemOptionsLoadException("Couldn't load system options.");

            if (string.IsNullOrWhiteSpace(systemOptions.EmailFromAddress) || string.IsNullOrWhiteSpace(systemOptions.SMTPServer))
                throw new InvalidSystemOptionsException("Email System Options must be set in the Control Panel!");

            using (var mailMessage = CreateMailMessage(email, systemOptions))
            {
                using (var smtpClient = new SmtpClient { Host = systemOptions.SMTPServer, EnableSsl = systemOptions.SMTPUseSsl, DeliveryMethod = SmtpDeliveryMethod.Network })
                {
                    if (systemOptions.SMTPPort > 0)
                        smtpClient.Port = systemOptions.SMTPPort;

                    smtpClient.UseDefaultCredentials = !systemOptions.SMTPUseAuth;
                    if (systemOptions.SMTPUseAuth)
                        smtpClient.Credentials = new NetworkCredential(systemOptions.SMTPAuthName, systemOptions.SMTPAuthPass);
                    smtpClient.Timeout = 100000;

                    await smtpClient.SendMailAsync(mailMessage);

                    CreateAuditRecord(processName, itemId, string.Join(";", email.ToList), mailMessage.Subject, sender);
                }
            }
        }
コード例 #10
0
ファイル: EmailManager.cs プロジェクト: mparsin/Elements
        /// <summary> Sends an email asynchronously. </summary>
        /// <param name="to"> To address. </param>
        /// <param name="from"> From address. </param>
        /// <param name="cc"> CC address. </param>
        /// <param name="subject"> The subject. </param>
        /// <param name="message"> The message. </param>
        /// <param name="isHtml"> The is html. </param>
        /// <param name="processName"> The process name. </param>
        /// <param name="itemId"> The item id. </param>
        /// <param name="sender">Action or User</param>
        /// <param name="sysOptions"> The system options. </param>
        /// <returns> The asynchronous task. </returns>
        public async Task SendEmailAsync(
            string to,
            string @from,
            string cc,
            string subject,
            string message,
            bool isHtml,
            string processName,
            int itemId,
            string sender,
            ISystemOptionsInfo sysOptions)
        {
            var email = new EmailEntity { From = @from, Subject = subject, Body = message, IsHtml = true };

            email.ToList.Add(to);
            email.CCList.Add(cc);

            await SendEmailAsync(email, processName, itemId, sender, sysOptions);
        }
コード例 #11
0
ファイル: EmailManager.cs プロジェクト: mparsin/Elements
        public void SendEmail(EmailEntity email, string processName, int itemId, ISystemOptionsInfo sysOptions)
        {
            if (email == null)
                return;

            var systemOptions = sysOptions ?? SystemOptionsInfo.GetSystemOptionsInfo();

            if (systemOptions == null)
                throw new VeyronException("System Options not loaded!!!");

            if (string.IsNullOrWhiteSpace(systemOptions.EmailFromAddress) || string.IsNullOrWhiteSpace(systemOptions.SMTPServer))
                throw new VeyronException("Email System Options must be set in the Control Panel!");


            using (var mailMessage = CreateMailMessage(email, systemOptions))
            {
                using (var smtpClient = new SmtpClient { Host = systemOptions.SMTPServer, EnableSsl = systemOptions.SMTPUseSsl, DeliveryMethod = SmtpDeliveryMethod.Network })
                {
                    if (systemOptions.SMTPPort > 0)
                        smtpClient.Port = systemOptions.SMTPPort;

                    smtpClient.UseDefaultCredentials = !systemOptions.SMTPUseAuth;
                    if (systemOptions.SMTPUseAuth)
                        smtpClient.Credentials = new NetworkCredential(systemOptions.SMTPAuthName, systemOptions.SMTPAuthPass);
                    smtpClient.Timeout = 100000;

                    smtpClient.Send(mailMessage);

                    CreateAuditRecord(processName, itemId, string.Join(";", email.ToList), mailMessage.Subject, string.Empty);
                }
            }
        }
コード例 #12
0
ファイル: UploadController.cs プロジェクト: mparsin/Elements
        private static void UploadFile(string fileName, string localFileName, ISystemOptionsInfo systemOptions)
        {
            using (var inputStream = File.OpenRead(localFileName))
            {
                var url = string.Format(CultureInfo.InvariantCulture, "{0}?FileName={1}", systemOptions.FileProcessorURI, fileName);

                var webRequest = WebRequest.Create(new Uri(url));
                webRequest.Method = "POST";
                webRequest.ContentLength = inputStream.Length;
                webRequest.ContentType = "application/x-www-form-urlencoded";
                ((HttpWebRequest)webRequest).AllowWriteStreamBuffering = false;

                using (var outputStream = webRequest.GetRequestStream())
                {
                    var buffer = new byte[Constants.FileProcessBufferSize];
                    int bytesRead;

                    while ((bytesRead = inputStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        outputStream.Write(buffer, 0, bytesRead);
                    }

                    webRequest.GetResponse();
                }
            }
        }