Exemplo n.º 1
0
        public async Task <IActionResult> SendEmail([FromBody] ContactEmailDetails contactEmailDetails)
        {
            //https://www.humankode.com/asp-net-core/asp-net-core-configuration-best-practices-for-keeping-secrets-out-of-source-control
            //http://stevetalkscode.co.uk/configuration-bridging-part-4

            //http://www.projectcodify.com/how-to-send-email-in-aspnet-core-20
            var smtpClient = new SmtpClient
            {
                Host        = "smtp.gmail.com", // set your SMTP server name here
                Port        = 587,              // Port
                EnableSsl   = true,
                Credentials = new NetworkCredential("*****@*****.**", "password")
            };

            using (var message = new MailMessage("*****@*****.**", "*****@*****.**")
            {
                Subject = "Subject",
                Body = "Body"
            })
            {
                await smtpClient.SendMailAsync(message);
            }

            return(Ok());
        }
        private static String[] BuildEmailPatterns(ContactEmailDetails EmailDetails)
        {
            // E-mail patterns, ordered by likelihood of appearing
            String Pattern0  = EmailDetails.FirstNameClean.Length != 1 ? EmailDetails.FirstNameClean + "#" + EmailDetails.LastNameClean : "¬FirstName#" + EmailDetails.LastNameClean;                                                // [email protected]
            String Pattern1  = EmailDetails.FirstNameInital + "#" + EmailDetails.LastNameClean;                                                                                                                                      // [email protected]
            String Pattern2  = EmailDetails.FirstNameClean;                                                                                                                                                                          // [email protected]
            String Pattern3  = EmailDetails.FirstNameClean + "#" + EmailDetails.LastNameInitial;                                                                                                                                     // [email protected]
            String Pattern4  = EmailDetails.LastNameClean;                                                                                                                                                                           // [email protected]
            String Pattern5  = EmailDetails.FirstNameInital != EmailDetails.FirstNameClean ? EmailDetails.LastNameClean + "#" + EmailDetails.FirstNameInital : "¬" + EmailDetails.LastNameClean + "#FirstNameInital";                // [email protected]
            String Pattern6  = EmailDetails.FirstNameInital + "#" + EmailDetails.LastNameInitial;                                                                                                                                    // [email protected]
            String Pattern7  = EmailDetails.LastNameClean + "#" + EmailDetails.FirstNameClean;                                                                                                                                       // [email protected]
            String Pattern8  = EmailDetails.FirstNameDubInitial != EmailDetails.FirstNameClean ? EmailDetails.FirstNameDubInitial + "#" + EmailDetails.LastNameClean : "¬FirstNameDubInitial#" + EmailDetails.LastNameClean;         // [email protected]
            String Pattern9  = EmailDetails.LastNameDubInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameClean + "#" + EmailDetails.LastNameDubInitial : "¬" + EmailDetails.FirstNameClean + "#LastNameDubInitial";      // [email protected]
            String Pattern10 = EmailDetails.LastNameQuadInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameInital + "#" + EmailDetails.LastNameQuadInitial : "¬" + EmailDetails.FirstNameInital + "#LastNameQuadInitial"; // [email protected]
            String Pattern11 = EmailDetails.LastNameDubInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameInital + "#" + EmailDetails.LastNameDubInitial : "¬" + EmailDetails.FirstNameInital + "#LastNameDubInitial";    // [email protected]
            String Pattern12 = EmailDetails.LastNameQuadInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameClean + "#" + EmailDetails.LastNameQuadInitial : "¬" + EmailDetails.FirstNameClean + "#LastNameQuadInitial";   // [email protected]
            String Pattern13 = EmailDetails.LastNameTriInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameClean + "#" + EmailDetails.LastNameTriInitial : "¬" + EmailDetails.FirstNameClean + "#LastNameTriInitial";      // [email protected]
            String Pattern14 = EmailDetails.LastNameTriInitial != EmailDetails.LastNameClean ? EmailDetails.FirstNameInital + "#" + EmailDetails.LastNameTriInitial : "¬" + EmailDetails.FirstNameInital + "#LastNameTriInitial";    // [email protected]
            String Pattern15 = EmailDetails.FirstNameDubInitial != EmailDetails.FirstNameClean ? EmailDetails.LastNameClean + "#" + EmailDetails.FirstNameDubInitial : "¬" + EmailDetails.LastNameClean + "#FirstNameDubInitial";    // [email protected]
            String Pattern16 = EmailDetails.FirstNameTriInitial != EmailDetails.FirstNameClean ? EmailDetails.LastNameClean + "#" + EmailDetails.FirstNameTriInitial : "¬" + EmailDetails.LastNameClean + "#FirstNameTriInitial";    // [email protected]

            String[] EmailPatterns = new String[] { Pattern0, Pattern1, Pattern2, Pattern3, Pattern4, Pattern5, Pattern6, Pattern7,
                                                    Pattern8, Pattern9, Pattern10, Pattern11, Pattern12, Pattern13, Pattern14, Pattern15, Pattern16 };

            return(EmailPatterns);
        }
Exemplo n.º 3
0
        private ContactEmailDetails GetEmailDetails(string pContactsID)
        {
            ContactEmailDetails _contactEmailDetails = new ContactEmailDetails();

            if (pContactsID.Equals(NewOrderDetail.CONST_ZZNAME_DEFAULTID))
            {
                _contactEmailDetails = GetEmailAddressFromNote();
            }
            else
            {
                _contactEmailDetails = _contactEmailDetails.GetContactsEmailDetails(Convert.ToInt64(pContactsID));
            }
            return(_contactEmailDetails);
        }
Exemplo n.º 4
0
        private ContactEmailDetails GetEmailAddressFromNote()
        {
            ContactEmailDetails _contactEmailDetails = null;

            string _Notes = dvOrderHeaderGetLabelValue("lblNotes");

            int _Start = _Notes.IndexOf(CONST_EMAILDELIMITERSTART);

            if (_Start >= 0)
            {
                _contactEmailDetails = new ContactEmailDetails();
                _contactEmailDetails.EmailAddress = _Notes.Substring(_Start + 2, _Notes.IndexOf(CONST_EMAILDELIMITEREND) - _Start - 2);
            }

            return(_contactEmailDetails);
        }
        private static String ImplementPattern(int PatternID, String EmailDelimeter, String Domain, String FirstNameClean, String LastNameClean)
        {
            String EstimatedEmail       = String.Empty;
            ContactEmailDetails Contact = new ContactEmailDetails(FirstNameClean, LastNameClean, String.Empty);

            // E-mail patterns, ordered by likelihood of appearing
            switch (PatternID)
            {
            case 0:
                EstimatedEmail = Contact.FirstNameClean + EmailDelimeter + Contact.LastNameClean;
                break;     // [email protected]

            case 1:
                EstimatedEmail = Contact.FirstNameInital + EmailDelimeter + Contact.LastNameClean;
                break;     // [email protected]

            case 2:
                EstimatedEmail = Contact.FirstNameClean;
                break;     // [email protected]

            case 3:
                EstimatedEmail = Contact.FirstNameClean + EmailDelimeter + Contact.LastNameInitial;
                break;     // [email protected]

            case 4:
                EstimatedEmail = Contact.LastNameClean;
                break;     // [email protected]

            case 5:
                EstimatedEmail = Contact.LastNameClean + EmailDelimeter + Contact.FirstNameInital;
                break;     // [email protected]

            case 6:
                EstimatedEmail = Contact.FirstNameInital + EmailDelimeter + Contact.LastNameInitial;
                break;     // [email protected]

            case 7:
                EstimatedEmail = Contact.LastNameClean + EmailDelimeter + Contact.FirstNameClean;
                break;     // [email protected]

            case 8:
                EstimatedEmail = Contact.FirstNameDubInitial + EmailDelimeter + Contact.LastNameClean;
                break;     // [email protected]

            case 9:
                EstimatedEmail = Contact.FirstNameClean + EmailDelimeter + Contact.LastNameDubInitial;
                break;     // [email protected]

            case 10:
                EstimatedEmail = Contact.FirstNameInital + EmailDelimeter + Contact.LastNameQuadInitial;
                break;     // [email protected]

            case 11:
                EstimatedEmail = Contact.FirstNameInital + EmailDelimeter + Contact.LastNameDubInitial;
                break;     // [email protected]

            case 12:
                EstimatedEmail = Contact.FirstNameClean + EmailDelimeter + Contact.LastNameQuadInitial;
                break;     // [email protected]

            case 13:
                EstimatedEmail = Contact.FirstNameClean + EmailDelimeter + Contact.LastNameTriInitial;
                break;     // [email protected]

            case 14:
                EstimatedEmail = Contact.FirstNameInital + EmailDelimeter + Contact.LastNameTriInitial;
                break;     // [email protected]

            case 15:
                EstimatedEmail = Contact.LastNameClean + EmailDelimeter + Contact.FirstNameDubInitial;
                break;     // [email protected]

            case 16:
                EstimatedEmail = Contact.LastNameClean + EmailDelimeter + Contact.FirstNameTriInitial;
                break;     // [email protected]
            }

            if (EstimatedEmail != String.Empty)
            {
                EstimatedEmail += Domain;
            }
            else
            {
                EstimatedEmail = null;
            }

            return(EstimatedEmail);
        }
        private static String BuildEmails(DataTable Companies, bool PerformBuild = true, bool PerformIncrementalBuild = false, bool LogUnmatchedEmails = false, bool DisplayDetailedOutput = false, String EstimatedBy = "0", String TargetContactID = "")
        {
            if (HttpContext.Current != null)
            {
                Context = HttpContext.Current;
            }
            else if (Context == null)
            {
                throw new Exception("No HttpContext set for the EmailBuilder, please pass HttpContext.Current, i.e. EmailBuilder.Context = HttpContext.Current;");
            }

            DataColumnCollection columns = Companies.Columns;

            if (!columns.Contains("CompanyID") || !columns.Contains("CompanyName"))
            {
                throw new Exception("Error, the Companies DataTable for function 'BuildEmailsByCompanyList' must contain at least a column named 'CompanyID' and a column named 'CompanyName'.");
            }

            Stopwatch sw = new Stopwatch();

            sw.Start();

            String BuildOutput               = String.Empty;
            int    BuiltEmails               = 0;
            int    TotalContactsWithEmail    = 0;
            double TotalContactsWithoutEmail = 0;
            int    CompaniesCrawled          = Companies.Rows.Count;

            String[] DelimeterVariants = new String[] { ".", "", "-", "_" };
            Dictionary <Int32, Int32> OverallEmailPatternMatchWeights = new Dictionary <Int32, Int32>();

            // For each company, get list of contacts, in order of email (nulls are replaced such that they always appear last)
            for (int cpy = 0; cpy < Companies.Rows.Count; cpy++)
            {
                String CompanyID   = Companies.Rows[cpy]["CompanyID"].ToString();
                String CompanyName = Context.Server.HtmlEncode(Companies.Rows[cpy]["CompanyName"].ToString());
                bool   AnyMatchedForThisCompany = false;
                bool   AnyBuiltForThisCompany   = false;

                if (DisplayDetailedOutput)
                {
                    BuildOutput += "<br/><br/><b>--------------------- START OF COMPANY '" + CompanyName
                                   + "' BUILD ----------------------</b><br/>Attempting to build e-mails for contacts at company <b>'" + CompanyName + "'</b>..<br/>";
                }

                // Get all contacts at this company with an email
                String qry = "SELECT ContactID, " +
                             "LOWER(TRIM(REPLACE(REPLACE(REPLACE(REPLACE(FirstName,'.',''),' ',''),'''',''),',',''))) as 'fn_clean', " + // ,'-','') // keep hyphenated names, and hope the e-mail address honors them
                             "LOWER(TRIM(REPLACE(REPLACE(REPLACE(REPLACE(LastName,'.',''),' ',''),'''',''),',',''))) as 'ln_clean', " +  // ,'-','')
                             "TRIM(LOWER(Email)) as 'email' " +
                             "FROM db_contact WHERE " + EmailRequirementsSQL + NameRequirementsSQL + " AND db_contact.CompanyID=@CompanyID " +
                             "ORDER BY email";
                DataTable dt_contacts_with_email = SQL.SelectDataTable(qry, "@CompanyID", CompanyID);
                TotalContactsWithEmail += dt_contacts_with_email.Rows.Count;

                // Determine weighting for each pattern when compared against each contact with an email at this company
                Dictionary <Int32, Int32>  CompanyEmailPatternMatchWeights   = new Dictionary <Int32, Int32>();
                Dictionary <String, Int32> CompanyEmailDelimeterMatchWeights = new Dictionary <String, Int32>();
                Dictionary <String, Int32> CompanyEmailDomainMatchWeights    = new Dictionary <String, Int32>();
                for (int ctc = 0; ctc < dt_contacts_with_email.Rows.Count; ctc++)
                {
                    ContactEmailDetails Contact = new ContactEmailDetails(
                        dt_contacts_with_email.Rows[ctc]["fn_clean"].ToString(),
                        dt_contacts_with_email.Rows[ctc]["ln_clean"].ToString(),
                        dt_contacts_with_email.Rows[ctc]["email"].ToString());
                    String[] EmailPatterns = BuildEmailPatterns(Contact);

                    if (DisplayDetailedOutput)
                    {
                        BuildOutput += "<br/>&emsp;<b>Contact with E-mail #" + (ctc + 1) + " [Clean Lower] "
                                       + (Context.Server.HtmlEncode(Contact.FirstNameClean) + " " + Context.Server.HtmlEncode(Contact.LastNameClean)).Trim() + "&emsp; " + Context.Server.HtmlEncode(Contact.Email) + "</b><br/>";
                    }

                    bool PatternMatch = false;
                    for (int P = 0; P < EmailPatterns.Length; P++)
                    {
                        // Ignore email patterns which contain invalid initials
                        if (!EmailPatterns[P].Contains("¬") || DisplayDetailedOutput)
                        {
                            String EmailPattern = EmailPatterns[P] + Contact.EmailDomain;
                            if (EmailPatterns[P].Contains("#"))
                            {
                                for (int D = 0; D < DelimeterVariants.Length; D++)
                                {
                                    if (EmailPattern.Replace("#", DelimeterVariants[D]) == Contact.Email)
                                    {
                                        PatternMatch = true;
                                        // add delimeter to weights
                                        if (CompanyEmailDelimeterMatchWeights.ContainsKey(DelimeterVariants[D]))
                                        {
                                            CompanyEmailDelimeterMatchWeights[DelimeterVariants[D]] += 1;
                                        }
                                        else
                                        {
                                            CompanyEmailDelimeterMatchWeights.Add(DelimeterVariants[D], 1);
                                        }

                                        EmailPattern = EmailPattern.Replace("#", DelimeterVariants[D]);
                                        break;
                                    }
                                }
                            }
                            else
                            {
                                PatternMatch = (EmailPattern == Contact.Email);
                            }

                            if (DisplayDetailedOutput)
                            {
                                String BuildableColor = "<font color='red'>";
                                if (PatternMatch)
                                {
                                    BuildableColor = "<font color='green'>";
                                }

                                if (EmailPattern.Contains("¬"))
                                {
                                    EmailPattern = "<b> " + Context.Server.HtmlEncode(EmailPattern.Replace("¬", String.Empty)) + "</b>";
                                }
                                else
                                {
                                    EmailPattern = Context.Server.HtmlEncode(EmailPattern);
                                }

                                BuildOutput += "&emsp;" + BuildableColor + "<i>[Pattern " + P + "]&emsp; " + EmailPattern + "</i></font><br/>";
                            }

                            if (PatternMatch)
                            {
                                AnyMatchedForThisCompany = true;

                                // add email pattern to company pattern weights
                                if (CompanyEmailPatternMatchWeights.ContainsKey(P))
                                {
                                    CompanyEmailPatternMatchWeights[P] += 1;
                                }
                                else
                                {
                                    CompanyEmailPatternMatchWeights.Add(P, 1);
                                }

                                // add email pattern to overall pattern weights
                                if (OverallEmailPatternMatchWeights.ContainsKey(P))
                                {
                                    OverallEmailPatternMatchWeights[P] += 1;
                                }
                                else
                                {
                                    OverallEmailPatternMatchWeights.Add(P, 1);
                                }

                                // add email domain to company domain weights
                                if (CompanyEmailDomainMatchWeights.ContainsKey(Contact.EmailDomain))
                                {
                                    CompanyEmailDomainMatchWeights[Contact.EmailDomain] += 1;
                                }
                                else
                                {
                                    CompanyEmailDomainMatchWeights.Add(Contact.EmailDomain, 1);
                                }
                                break;
                            }
                        }
                    }
                    if (LogUnmatchedEmails && !PatternMatch)
                    {
                        Util.Debug(Contact.FirstNameClean + " " + Contact.LastNameClean + " - " + Contact.Email + " (At company " + cpy + " of " + Companies.Rows.Count + ")");
                    }
                }

                // Get all contacts at this company without an e-mail
                qry = qry.Replace(EmailRequirementsSQL, "email IS NULL ");
                DataTable dt_contacts_without_email = SQL.SelectDataTable(qry, "@CompanyID", CompanyID);
                TotalContactsWithoutEmail += dt_contacts_without_email.Rows.Count;

                // If any have matched, build emails
                String EmailsBuiltStatsSummary = String.Empty;
                if (AnyMatchedForThisCompany)
                {
                    // Output weights for this company
                    if (DisplayDetailedOutput)
                    {
                        BuildOutput += "<br/>E-mail pattern match weight stats for company <b>'" + CompanyName + "':</b><br/>";
                        foreach (var item in CompanyEmailPatternMatchWeights.OrderByDescending(r => r.Value).Take(100))
                        {
                            BuildOutput += "&emsp;Pattern Number " + Context.Server.HtmlEncode(item.Key.ToString())
                                           + ", matched " + Context.Server.HtmlEncode(Util.CommaSeparateNumber(Convert.ToDouble(item.Value.ToString()), false)) + " times<br/>";
                        }
                    }

                    // Determine highest ranked pattern, domain and delimeter
                    IOrderedEnumerable <KeyValuePair <Int32, Int32> > CompanyEmailPatternMatchWeightsList = CompanyEmailPatternMatchWeights.OrderByDescending(x => x.Value).ThenBy(x => x.Key);
                    int    HighestRankedPatternID        = Convert.ToInt32(CompanyEmailPatternMatchWeightsList.ElementAt(0).Key);
                    String HighestRankedPatternDelimeter = ".";
                    foreach (var item in CompanyEmailDelimeterMatchWeights.OrderByDescending(r => r.Value).Take(1))
                    {
                        HighestRankedPatternDelimeter = item.Key.ToString();
                    }
                    String HighestRankedDomain = CompanyEmailDomainMatchWeights.OrderByDescending(r => r.Value).Take(1).ToString();
                    foreach (var item in CompanyEmailDomainMatchWeights.OrderByDescending(r => r.Value).Take(1))
                    {
                        HighestRankedDomain = item.Key.ToString();
                    }

                    // Now apply the highest rated pattern to all contacts at this company who do not have an e-mail
                    String uqry = "UPDATE db_contact SET email=@ee WHERE ContactID=@ctc_id";
                    String iqry = "INSERT IGNORE INTO db_contact_email_history (ContactID, Email, Estimated, DataGeekEstimate, EstimatedByUserID, EstimationDate, EmailEstimationPatternID, UsingCleanFirstName, UsingCleanLastName) " +
                                  "VALUES (@ContactID, @Email, 1, 1, @EstimatedBy, CURRENT_TIMESTAMP, @EmailEstimationPatternID, @UsingCleanFirstName, @UsingCleanLastName);";
                    for (int ctc = 0; ctc < dt_contacts_without_email.Rows.Count; ctc++)
                    {
                        String ContactID      = dt_contacts_without_email.Rows[ctc]["ContactID"].ToString();
                        String FirstNameClean = Util.RemoveAccents(dt_contacts_without_email.Rows[ctc]["fn_clean"].ToString());
                        String LastNameClean  = Util.RemoveAccents(dt_contacts_without_email.Rows[ctc]["ln_clean"].ToString());
                        String EstimatedEmail = ImplementPattern(HighestRankedPatternID, HighestRankedPatternDelimeter, HighestRankedDomain, FirstNameClean, LastNameClean);

                        if (EstimatedEmail != null)
                        {
                            AnyBuiltForThisCompany = true;

                            int  ThisHighestRankedPatternID = HighestRankedPatternID;
                            bool HasBuiltNewUniqueEmail     = false;
                            if (PerformBuild)
                            {
                                // check whether the highest ranked pattern has been used to build an email for this contact before (or an entry has been manually deleted by user)
                                bool   HighestRankedPatternIDAlreadyImplemented          = false;
                                bool   HighestRankedPatternIDAlreadyImplementedAndFailed = false;
                                String ib_qry = "SELECT CASE WHEN EmailEstimateByPatternFailed IS NULL OR EmailEstimateByPatternFailed = 0 THEN 0 ELSE 1 END as 'Failed', Deleted FROM db_contact_email_history WHERE " +
                                                "ContactID=@ContactID AND DataGeekEstimate=1 AND EmailEstimationPatternID IS NOT NULL AND Email=@ThisEstimatedEmail";
                                DataTable dt_main_pattern_match = SQL.SelectDataTable(ib_qry, new String[] { "@ContactID", "@ThisEstimatedEmail" }, new Object[] { ContactID, EstimatedEmail });
                                HighestRankedPatternIDAlreadyImplemented = dt_main_pattern_match.Rows.Count > 0;
                                if (HighestRankedPatternIDAlreadyImplemented)
                                {
                                    HighestRankedPatternIDAlreadyImplementedAndFailed = dt_main_pattern_match.Rows[0]["Failed"].ToString() == "1" || dt_main_pattern_match.Rows[0]["Deleted"].ToString() == "1";
                                }

                                bool FoundAlternativePatternToImplement = false;
                                if (PerformIncrementalBuild && HighestRankedPatternIDAlreadyImplementedAndFailed && CompanyEmailPatternMatchWeightsList.Count() > 1)
                                {
                                    // check to make sure we don't have any other patterns which are not marked as failed yet (or entry has been deleted by user)
                                    String ch_qry = "SELECT ContactID FROM db_contact_email_history WHERE ContactID=@ContactID AND DataGeekEstimate=1 AND EmailEstimationPatternID IS NOT NULL AND (EmailEstimateByPatternFailed IS NULL OR EmailEstimateByPatternFailed=0) AND Deleted=0";
                                    bool   CanIncrementalBuild = SQL.SelectDataTable(ch_qry, new String[] { "@ContactID", "@ThisEstimatedEmail" }, new Object[] { ContactID, EstimatedEmail }).Rows.Count == 0;

                                    if (CanIncrementalBuild)
                                    {
                                        // start with the second-highest ranked pattern for this company's contacts, build and test
                                        for (int i = 1; i < CompanyEmailPatternMatchWeightsList.Count(); i++)
                                        {
                                            EstimatedEmail = ImplementPattern(CompanyEmailPatternMatchWeightsList.ElementAt(i).Key, HighestRankedPatternDelimeter, HighestRankedDomain, FirstNameClean, LastNameClean);
                                            FoundAlternativePatternToImplement = SQL.SelectDataTable(ib_qry, new String[] { "@ContactID", "@ThisEstimatedEmail" }, new Object[] { ContactID, EstimatedEmail }).Rows.Count == 0;

                                            if (FoundAlternativePatternToImplement)
                                            {
                                                ThisHighestRankedPatternID = CompanyEmailPatternMatchWeightsList.ElementAt(i).Key;
                                                break;
                                            }
                                        }
                                    }
                                }

                                HasBuiltNewUniqueEmail = (!HighestRankedPatternIDAlreadyImplemented || FoundAlternativePatternToImplement) && EstimatedEmail.Length <= 100 && (TargetContactID == String.Empty || ContactID == TargetContactID);

                                // Add email based on selected pattern to email history
                                if (HasBuiltNewUniqueEmail)
                                {
                                    if (FirstNameClean.Length > 50)
                                    {
                                        FirstNameClean = FirstNameClean.Substring(0, 49);
                                    }
                                    if (LastNameClean.Length > 50)
                                    {
                                        LastNameClean = LastNameClean.Substring(0, 49);
                                    }

                                    SQL.Insert(iqry,
                                               new String[] { "@ContactID", "@Email", "@EstimatedBy", "@EmailEstimationPatternID", "@UsingCleanFirstName", "@UsingCleanLastName" },
                                               new Object[] { ContactID, EstimatedEmail, EstimatedBy, ThisHighestRankedPatternID, FirstNameClean, LastNameClean });

                                    //// temp, for updating contact table directly
                                    //uqry = "UPDATE db_contact SET Email=@ee, EmailBuiltDate=CURRENT_TIMESTAMP WHERE ContactID=@ContactID";
                                    //SQL.Update(uqry, new String[] { "@ee", "@ContactID" }, new Object[] { EstimatedEmail, ContactID });
                                }
                            }

                            if (DisplayDetailedOutput)
                            {
                                if (HasBuiltNewUniqueEmail)
                                {
                                    EmailsBuiltStatsSummary += "<br/>&emsp;E-mail built for contact '" + Context.Server.HtmlEncode((FirstNameClean + " " + LastNameClean).Trim()) + "' as <b>" + Context.Server.HtmlEncode(EstimatedEmail) + "</b>" +
                                                               " using pattern " + ThisHighestRankedPatternID;
                                }
                                else
                                {
                                    EmailsBuiltStatsSummary += "<br/>&emsp;E-mail could not be built for contact <b>'" + Context.Server.HtmlEncode((FirstNameClean + " " + LastNameClean).Trim()) + "'</b> as all matched patterns have already been implemented.";
                                }
                            }

                            if (HasBuiltNewUniqueEmail)
                            {
                                BuiltEmails++;
                            }
                        }
                    }

                    // Set highest rated pattern for company, and assign ranking
                    uqry = "UPDATE db_company SET EmailEstimationPatternID=@EmailEstimationPatternID WHERE CompanyID=@CompanyID";
                    SQL.Update(uqry, new String[] { "@CompanyID", "@EmailEstimationPatternID" }, new Object[] { CompanyID, HighestRankedPatternID });
                }
                if (DisplayDetailedOutput)
                {
                    if (!AnyBuiltForThisCompany)
                    {
                        BuildOutput += "<br/>No e-mails could be built for this company..<br/>";
                    }
                    else
                    {
                        BuildOutput += "<br/>E-mails built for company <b>'" + CompanyName + "'</b>:<font color='green'>" + EmailsBuiltStatsSummary + "</font><br/>";
                    }

                    BuildOutput += "<br/><b>--------------------- END OF COMPANY '" + CompanyName + "' BUILD ----------------------</b>";
                }
            }

            // Show results of build
            String OverallEmailPatternWeights = String.Empty;

            foreach (var item in OverallEmailPatternMatchWeights.OrderByDescending(r => r.Value).Take(100))
            {
                OverallEmailPatternWeights += "&emsp;Pattern Number " + Context.Server.HtmlEncode(item.Key.ToString())
                                              + ", matched " + Context.Server.HtmlEncode(Util.CommaSeparateNumber(Convert.ToDouble(item.Value.ToString()), false)) + " times<br/>";
            }
            if (OverallEmailPatternWeights != String.Empty)
            {
                OverallEmailPatternWeights = "E-mail Pattern Match Stats:<br/>" + OverallEmailPatternWeights;
            }
            Double PercentBuilt = 0;

            if (BuiltEmails != 0 || TotalContactsWithoutEmail != 0)
            {
                PercentBuilt = (BuiltEmails / TotalContactsWithoutEmail) * 100;
            }

            String Results =
                "<b><font size='3'>Building E-mails finished...</b></font><p/><b>Overall Build Summary:</b><br/>" +
                "Contacts Crawled with E-mail: " + TotalContactsWithEmail + "<br/>" +
                "Contacts Crawled without E-mail: " + TotalContactsWithoutEmail + "<br/>" +
                "Companies Crawled: " + CompaniesCrawled + "<br/>" +
                "E-mails Built: " + BuiltEmails + " (" + PercentBuilt.ToString("N2") + "% of Contacts without E-mail)<br/>" +
                "Time Taken: " + sw.Elapsed.ToString("hh\\:mm\\:ss") + "<br/>" +
                OverallEmailPatternWeights + "<p>";

            if (DisplayDetailedOutput)
            {
                Results += "<b>Detailed Output:</b>" + BuildOutput;
            }

            sw.Stop();

            return(Results);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Send email to the current client to confirm the items in the current order, and the deliver date
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnConfirmOrder_Click(object sender, EventArgs e)
        {
            DropDownList _ddlThisContact = (DropDownList)dvOrderHeader.FindControl("ddlContacts");

            ContactEmailDetails _thisContact = GetEmailDetails(_ddlThisContact.SelectedItem.Value);

            if (_thisContact != null)
            {
                EmailCls     _email         = new EmailCls();
                DropDownList _ddlDeliveryBy = (DropDownList)dvOrderHeader.FindControl("ddlToBeDeliveredBy"); // who is delivering this

                string _DeliveryDate  = dvOrderHeaderGetLabelValue("lblRequiredByDate");                     // date it will be dispatched / delivered"
                string _PurchaseOrder = dvOrderHeaderGetLabelValue("lblPurchaseOrder");
                string _Notes         = dvOrderHeaderGetLabelValue("lblNotes");

                if (_thisContact.EmailAddress != "")
                {
                    _email.SetEmailFromTo(CONST_FROMEMAIL, _thisContact.EmailAddress);
                    if (_thisContact.altEmailAddress != "")
                    {
                        _email.SetEmailCC(_thisContact.altEmailAddress);
                    }
                }
                else if (_thisContact.altEmailAddress != "")
                {
                    _email.SetEmailFromTo(CONST_FROMEMAIL, _thisContact.altEmailAddress);
                }
                else
                {
                    ltrlStatus.Text = "no email address found";
                    TrackerDotNet.classes.showMessageBox _NoMsgBx = new classes.showMessageBox(this.Page, "Email FAILED: ", ltrlStatus.Text);
                    upnlNewOrderItem.Update();
                    return; // no email address so quit
                }
                // send a BCC to orders to confirm
                _email.SetEmailBCC(CONST_FROMEMAIL);
                // set subject and body
                _email.SetEmailSubject("Order Confirmation");

                string _AddressedTo = "Coffee Lover";
                if (_thisContact.FirstName != "")
                {
                    _AddressedTo = _thisContact.FirstName.Trim();
                    if (_thisContact.altFirstName != "")
                    {
                        _AddressedTo += " and " + _thisContact.altFirstName.Trim();
                    }
                }
                else if (_thisContact.altFirstName != "")
                {
                    _AddressedTo = _thisContact.altFirstName.Trim();
                }

                _email.AddStrAndNewLineToBody("Dear " + _AddressedTo + ",<br />");
                if (_ddlThisContact.SelectedValue.Equals(NewOrderDetail.CONST_ZZNAME_DEFAULTID))
                {
                    _email.AddStrAndNewLineToBody("We confirm you order below:");
                }
                else
                {
                    _email.AddStrAndNewLineToBody("We confirm the following order for " + _ddlThisContact.SelectedItem.Text + ":");
                }
                _email.AddToBody("<ul>");
                foreach (GridViewRow _gv in gvOrderLines.Rows)
                {
                    DropDownList _gvItemDLL       = (DropDownList)_gv.FindControl("ddlItemDesc");
                    Label        _gvItemQty       = (Label)_gv.FindControl("lblQuantityOrdered");
                    DropDownList _gvItemPackaging = (DropDownList)_gv.FindControl("ddlPackaging");
                    // need to check for serivce / note and add the note using the same logic as we have for the delivery sheet
                    if (GetItemSortOrderID(_gvItemDLL.SelectedValue) == ItemTypeTbl.CONST_NEEDDESCRIPTION_SORT_ORDER)
                    {
                        // if we are already use the notes field for name, check if there is a ":" seperator, and then only use what is after
                        if (_Notes.Contains(":"))
                        {
                            _Notes = _Notes.Substring(_Notes.IndexOf(":") + 1).Trim();
                        }

                        int _Start = _Notes.IndexOf(OrderDetail.CONST_EMAILDELIMITERSTART);
                        if (_Start >= 0)
                        {
                            int _End = _Notes.IndexOf(OrderDetail.CONST_EMAILDELIMITEREND);
                            if (_End >= 0)
                            {
                                _Notes = String.Concat(_Notes.Substring(0, _Start), ";", _Notes.Substring(_End + 2));
                            }
                        }

                        _email.AddFormatToBody("<li>{0}</li>", _Notes);
                    }
                    else
                    {
                        string _UnitsAndQty = AddUnitsToQty(_gvItemDLL.SelectedValue, _gvItemQty.Text);
                        if (_gvItemPackaging.SelectedIndex == 0)
                        {
                            _email.AddFormatToBody("<li>{0} of {1}</li>", _UnitsAndQty, _gvItemDLL.SelectedItem.Text);
                        }
                        else
                        {
                            _email.AddFormatToBody("<li>{0} of {1} - Preperation note: {2}</li>", _UnitsAndQty, _gvItemDLL.SelectedItem.Text, _gvItemPackaging.SelectedItem.Text);
                        }
                    }
                }
                _email.AddStrAndNewLineToBody("</ul>");

                if (!string.IsNullOrEmpty(_PurchaseOrder))
                {
                    if (_PurchaseOrder.EndsWith(TrackerTools.CONST_POREQUIRED))
                    {
                        _email.AddStrAndNewLineToBody("<b>NOTE</b>: We are still waiting for a Purchase Order number from you.<br />");
                    }
                    else
                    {
                        _email.AddStrAndNewLineToBody(string.Format("This order has purchase order: {0}, allocated to it.<br />", _PurchaseOrder));
                    }
                }
                if (_ddlDeliveryBy.SelectedItem.Text == CONST_DELIVERYTYPEISCOLLECTION)
                {
                    _email.AddStrAndNewLineToBody("The order will be ready for collection on: " + _DeliveryDate);
                }
                else if (_ddlDeliveryBy.SelectedItem.Text == CONST_DELIVERYTYPEISCOURIER)
                {
                    _email.AddStrAndNewLineToBody("The order will be dispatched on: " + _DeliveryDate + ".");
                }
                else
                {
                    _email.AddStrAndNewLineToBody("The order will be delivered on: " + _DeliveryDate + ".");
                }

                // Add a footer
                MembershipUser _currMember = Membership.GetUser();
                string         _from       = string.IsNullOrEmpty(_currMember.UserName) ? "the Quaffee Team" : " from the Quaffee Team (" + UpCaseFirstLetter(_currMember.UserName) + ")";

                _email.AddStrAndNewLineToBody("<br />Sent automatically by Quaffee's order and tracking System.<br /><br />Sincerely " + _from + " ([email protected])");
                if (_email.SendEmail())
                {
                    ltrlStatus.Text = "Email Sent to: " + _AddressedTo;
                }
                else
                {
                    showMessageBox _msg = new showMessageBox(this.Page, "error", "error sending email: " + _email.myResults);
                    ltrlStatus.Text = "Email was not sent!";
                }

                TrackerDotNet.classes.showMessageBox _MsgBx = new classes.showMessageBox(this.Page, "Email Confirmation", ltrlStatus.Text);
                upnlNewOrderItem.Update();
            }
        }