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); }
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); }
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/> <b>Contact with E-mail #" + (ctc + 1) + " [Clean Lower] " + (Context.Server.HtmlEncode(Contact.FirstNameClean) + " " + Context.Server.HtmlEncode(Contact.LastNameClean)).Trim() + "  " + 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 += " " + BuildableColor + "<i>[Pattern " + P + "]  " + 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 += " 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/> E-mail built for contact '" + Context.Server.HtmlEncode((FirstNameClean + " " + LastNameClean).Trim()) + "' as <b>" + Context.Server.HtmlEncode(EstimatedEmail) + "</b>" + " using pattern " + ThisHighestRankedPatternID; } else { EmailsBuiltStatsSummary += "<br/> 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 += " 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); }
/// <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(); } }