We have Version: 9.0.2.6218
We haven't made any changes to this code:
#region CONTACT US
[RegisterWidget(DisplayName = "Contact Us Form", Category = CommerceBuilder.CMS.WidgetCategory.General, Description = "Generates a form to collect contact information from a user.")]
public ActionResult ContactUs(ContactUsWidgetParams parameters)
{
var model = new ContactUsModel();
User user = AbleContext.Current.User;
model.FullName = (string.IsNullOrEmpty(user.PrimaryAddress.FirstName) && string.IsNullOrEmpty(user.PrimaryAddress.LastName)) ? string.Empty : user.PrimaryAddress.FirstName + " " + user.PrimaryAddress.LastName;
model.Email = user.Email;
model.ShowCaptcha = parameters.EnableCaptcha;
model.parameters = parameters;
model.GoogleReCaptchaEnabled = AbleContext.Current.Store.Settings.GoogleReCaptchaEnabled;
return PartialView("_ContactUs", model);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ContactUs(ContactUsModel model)
{
bool isSuccessful = false;
bool isFailure = false;
bool isMessagePanelVisible = false;
if (ModelState.IsValid)
{
if (model.parameters.EnableCaptcha)
{
string reCaptchaErrorMessage = string.Empty;
var isCaptchaValided = (AbleContext.Current.Store.Settings.GoogleReCaptchaEnabled ? GoogleReCaptchaHelper.Validate(Request.Form["g-Recaptcha-Response"], out reCaptchaErrorMessage) :
SecurityUtility.ValidateCaptcha(model.CaptchaInput, model.ChallengeText));
if (!isCaptchaValided)
{
//CAPTCHA IS VISIBLE AND DID NOT AUTHENTICATE
if (AbleContext.Current.Store.Settings.GoogleReCaptchaEnabled)
{
if (!string.IsNullOrEmpty(reCaptchaErrorMessage))
{
ModelState.AddModelError("ShowCaptcha", reCaptchaErrorMessage);
}
else ModelState.AddModelError("ShowCaptcha", LanguageManager.GetResource("retail.webpagecontroller.please_confirm_you_are_not_a_robot"));
}
else
{
ModelState.AddModelError("CaptchaInput", LanguageManager.GetResource("retail.webpagecontroller.you_did_not_input_the_verification_number_correctly"));
model.CaptchaInput = string.Empty;
}
return PartialView("_ContactUs", model);
}
}
// raise the contact us store event
StoreEventEngine.NewContactFormSubmitted(model.Email, model.FullName, model.Phone, model.Message);
// send the contact us email to merchant
Store store = AbleContext.Current.Store;
StoreSettingsManager settings = store.Settings;
MailMessage mailMessage = new MailMessage();
if (string.IsNullOrEmpty(model.parameters.SendTo))
{
mailMessage.To.Add(settings.DefaultEmailAddress);
}
else
{
mailMessage.To.Add(model.parameters.SendTo);
}
mailMessage.From = new System.Net.Mail.MailAddress(model.Email);
mailMessage.Subject = model.parameters.Subject;
mailMessage.Body += "Name: " + model.FullName + Environment.NewLine;
mailMessage.Body += "Email: " + model.Email + Environment.NewLine;
mailMessage.Body += "Phone: " + model.Phone + Environment.NewLine;
mailMessage.Body += "Comment: " + Environment.NewLine + model.Message;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mailMessage.IsBodyHtml = false;
mailMessage.Priority = System.Net.Mail.MailPriority.High;
SmtpSettings smtpSettings = SmtpSettings.DefaultSettings;
try
{
EmailClient.Send(mailMessage);
isSuccessful = true;
}
catch (Exception exp)
{
Logger.Error("ContactUs Control Exception: Exp" + Environment.NewLine + exp.Message);
isFailure = true;
}
isMessagePanelVisible = true;
// if confirmation email is enabled, send the confirmation email back to customer
if (model.parameters.EnableConfirmationEmail)
{
int emailTemplateId = model.parameters.ConfirmationEmailTemplateId;
// use default if none is provided
if (emailTemplateId == 0)
emailTemplateId = AbleContext.Current.Store.Settings.ContactUsConfirmationEmailTemplateId;
EmailTemplate template = _emailTemplateRepo.Load(emailTemplateId);
if (template != null)
{
template.Parameters.Add("user", AbleContext.Current.User);
template.Parameters.Add("store", AbleContext.Current.Store);
try
{
// populate the email for anonymous user account, it is needed for email message generation ('customer' parameter)
if (AbleContext.Current.User.IsAnonymousOrGuest)
AbleContext.Current.User.Email = model.Email;
MailMessage[] messages = template.GenerateMailMessages();
foreach (MailMessage msg in messages)
{
msg.To.Clear();
msg.To.Add(new MailAddress(model.Email));
Task.Run(() => EmailClient.Send(msg, smtpSettings));
}
isFailure = false;
isSuccessful = true;
}
catch (Exception exp)
{
Logger.Error("ContactUs Control Exception: " + Environment.NewLine + exp.Message);
isFailure = true;
isSuccessful = false;
}
isMessagePanelVisible = true;
}
}
model.IsSuccess = isSuccessful;
model.IsFailure = isFailure;
model.IsMessagePanelVisible = isMessagePanelVisible;
return PartialView("_ContactUs", model);
}
else
{
return PartialView("_ContactUs", model);
}
}
private string GetFromAddress()
{
StoreSettingsManager settings = AbleContext.Current.Store.Settings;
string fromAddress = settings.DefaultEmailAddress;
if (string.IsNullOrEmpty(fromAddress)) fromAddress = "
[email protected]";
return fromAddress;
}
#endregion