Exemplo n.º 1
0
        public static void NormalizeFields(ref string from, ref string to, ref string cc, ref string bcc)
        {
            from = EmailFunctions.Normalize(from);
            to   = EmailFunctions.Normalize(to);
            cc   = EmailFunctions.Normalize(cc);
            bcc  = EmailFunctions.Normalize(bcc);

            if (from.IsEmpty())
            {
                string defaultOriginatorName  = RuntimePlatformSettings.EMail.DefaultOriginatorName.GetValue();
                string defaultOriginatorEmail = RuntimePlatformSettings.EMail.DefaultOriginator.GetValue();
                if (string.IsNullOrEmpty(defaultOriginatorName) || string.IsNullOrEmpty(defaultOriginatorEmail))
                {
                    throw new InvalidOperationException("The 'Default Sender Email' and 'Default Sender Name' must be set in Service Center's Email Configuration to send emails.");
                }
                from = EmailFunctions.Normalize(EmailFunctions.Compose(Encoding.UTF8, RuntimePlatformSettings.EMail.DefaultOriginatorName.GetValue(), RuntimePlatformSettings.EMail.DefaultOriginator.GetValue()));
            }
        }
Exemplo n.º 2
0
        // Left public because testing console needs this
        public static string ProcessEmailAddresses(Encoding encoding, string addresses)
        {
            StringBuilder new_addresses = new StringBuilder();

            string[] address_array = addresses.Split(',', ';');

            EncodeFlags flags = EncodeFlags.SingleLine | EncodeFlags.QuotedPrintable;

            foreach (string address_item in address_array)
            {
                string new_address_item = EmailHelper.TrimHeaderLine(EmailHelper.RemoveControlCodes(address_item));
                new_address_item = EmailFunctions.EncloseEmail(new_address_item);

                if (new_address_item.Length > 0)
                {
                    if (new_address_item.IndexOf("<") > 0)
                    {
                        string desc    = new_address_item.Substring(0, new_address_item.IndexOf("<") - 1);
                        string address = new_address_item.Substring(new_address_item.IndexOf("<") - 1, new_address_item.Length - new_address_item.IndexOf("<") + 1);
                        if (address != null)
                        {
                            address = EmailHelper.TrimHeaderLine(address);
                        }
                        if (EmailEncoding.NeedsEncoding(encoding, desc, flags))
                        {
                            new_addresses.Append(", " + EmailEncoding.EncodeString(encoding, desc, flags) + address);
                        }
                        else
                        {
                            new_addresses.Append(", " + new_address_item);
                        }
                    }
                    else
                    {
                        new_addresses.Append(", " + new_address_item);
                    }
                }
            }
            return(new_addresses.ToString().TrimStart(',').TrimStart());
        }
Exemplo n.º 3
0
        public static int SendEmailRequest(string url, string from, string to, string cc, string bcc,
                                           int activityId, int tenantId, int userId, string consumerKey, string producerKey,
                                           bool storeContent, EmailType type)
        {
            from = EmailFunctions.Normalize(from);
            to   = EmailFunctions.Normalize(to);
            cc   = EmailFunctions.Normalize(cc);
            bcc  = EmailFunctions.Normalize(bcc);

            if (to.IsEmpty() && cc.IsEmpty() && bcc.IsEmpty())
            {
                throw new InvalidOperationException("Error creating email. There must be at least one recipient.");
            }

            try {
                int emailId = 0;

                url = url
                      + (url.Contains("?") ? "&" : "?")
                      + "_From=" + HttpUtility.UrlEncode(from)
                      + "&_To=" + HttpUtility.UrlEncode(to)
                      + "&_CC=" + HttpUtility.UrlEncode(cc)
                      + "&_BCC=" + HttpUtility.UrlEncode(bcc)
                      + "&_ActivityId=" + activityId
                      + "&_TenantId=" + tenantId
                      + "&_UserId=" + userId
                      + "&_ProducerKey=" + producerKey
                      + "&_IsEmail=true"
                      + "&_StoreContent=" + ((storeContent || (type == EmailType.TestDownloadEmail)) ? "true" : "false")
                      + ((type == EmailType.TestSendEmail || type == EmailType.TestDownloadEmail) ? "&_IsTestEmail=true" : "");

                string baseUrl;
                EmailHelper.QueryParameter[] parameters;
                EmailHelper.SplitUrl(url, out baseUrl, out parameters);

                string content;
                string encoding;
                var    authHeader = SecurityTokenManager.GenerateAuthorizationHeader(RuntimeSettingsProvider.Instance, consumerKey, producerKey, userId, tenantId);
                var    headers    = new Dictionary <HttpRequestHeader, string>();
                headers.Add(HttpRequestHeader.Authorization, authHeader);
                EmailHelper.HttpPost(baseUrl, parameters, headers, "", null, out content, out encoding);

                var exceptionMatch = exceptionExp.Match(content);
                if (exceptionMatch != Match.Empty)
                {
                    string message    = HttpUtility.HtmlDecode(exceptionMatch.Groups[1].Value);
                    string stacktrace = HttpUtility.HtmlDecode(exceptionMatch.Groups[2].Value);
                    throw new EmailException("Error creating Email. " + message, stacktrace);
                }
                else
                {
                    var emailMatch = emailIdExp.Match(content);
                    if (emailMatch != Match.Empty)
                    {
                        emailId = Convert.ToInt32(emailMatch.Groups[1].Value);
                    }
                    else
                    {
                        throw new EmailException("Error creating Email. No EmailId was returned.");
                    }
                }

                if (type != EmailType.TestDownloadEmail)
                {
                    if (RuntimePlatformSettings.Sandbox.SandboxOperating.GetValue())
                    {
                        using (Transaction statusTransaction = DatabaseAccess.ForCurrentDatabase.GetCommitableTransaction()) {
                            DBRuntimePlatform.Instance.CreateEmailStatus(statusTransaction, emailId);
                            SendEmailNotifier.Current.NotifiyNewEmail();
                            statusTransaction.Commit();
                        }
                    }
                    else
                    {
                        using (Transaction trans = DatabaseAccess.ForRuntimeDatabase.GetRequestTransaction()) {
                            DBRuntimePlatform.Instance.CreateEmailStatus(trans, emailId);
                        }
                    }
                }
                return(emailId);
            } catch (EmailException) {
                throw;
            } catch (Exception e) {
                throw new EmailException("Error creating Email.", e);
            }
        }