2009-07-08 36 views
7

Quiero hacer una funcionalidad básica con un simple formulario de contacto y enviar los correos electrónicos del formulario a alguien. Esto es bastante fácil de hacer en asp.net, sin embargo, tengo problemas una vez que lo cargo como control de usuario. ¿Tienes un buen ejemplo que pueda mirar? ¡Gracias!Formulario de contacto en SiteFinity C#

Respuesta

11

Es lo mismo que tendría en una página asp.net normal, el ejemplo asume que está utilizando la última versión de Sitefinity y que tiene un RadScriptManager o ScriptManager en su página maestra.

En primer lugar aquí es mi forma de código subyacente ejemplo:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Net.Mail; 
using System.Text; 
using System.ComponentModel; 

public partial class UserControls_LandingPage_contactForm : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void btnSubmit_Click(object sender, EventArgs e) 
    { 
     bool bSent = false; 
     try 
     { 
      //create the email and add the settings 
      var email = new MailMessage(); 
      email.From = new MailAddress(FromEmail); 
      email.To.Add(new MailAddress(FromEmail)); 
      email.Subject = Subject; 
      email.IsBodyHtml = true; 

      //build the body 
      var sBody = new StringBuilder(); 
      sBody.Append("<strong>Contact Details</strong><br /><br />"); 
      sBody.AppendFormat("Needs: {0}<br />", cboConsultationType.SelectedValue); 
      sBody.AppendFormat("Name: {0}<br />", txtName.Text); 
      sBody.AppendFormat("Email: {0}<br />", txtEmail.Text); 
      sBody.AppendFormat("Number: {0}<br />", txtPhone.Text); 
      sBody.AppendFormat("Comment: {0}<br />", txtMsg.Text); 
      email.Body = sBody.ToString(); 

      //send the email 
      var smtpServer = new SmtpClient(); 
      smtpServer.Send(email); 

      //mark as sent ok 
      bSent = true; 
     } 
     catch (Exception ex) 
     { 
      //send any errors back 
      //add your own custom handling of errors; 
     } 

     //let the end user know if it was a success 
     ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('" + (bSent ? SuccessText : FailureText) + "');", true); 
    } 

    //properties  
    public string FromEmail 
    { 
     get { return _fromEmail; } 
     set { _fromEmail = value; } 
    } 
    public string Subject 
    { 
     get { return _subject; } 
     set { _subject = value; } 
    } 
    public string SuccessText 
    { 
     get { return _successText; } 
     set { _successText = value; } 
    } 
    public string FailureText 
    { 
     get { return _failureText; } 
     set { _failureText = value; } 
    } 

    //fields 
    private string _fromEmail = "[email protected]"; 
    private string _subject = "Website Enquiry"; 
    private string _successText = "Thank you for submitting your details we will be in touch shortly."; 
    private string _failureText = "There was a problem submitting your details please try again shortly."; 

} 

Código ASCX:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ContactForm.ascx.cs" Inherits="UserControls_LandingPage_contactForm" %> 
<fieldset> 
    <div class="focus"> 
     <label> 
      I need...</label> 
     <asp:DropDownList ID="cboConsultationType" runat="server" CssClass="select sub web"> 
      <asp:ListItem Value="I Need A New Web Site">A completely new website</asp:ListItem> 
      <asp:ListItem Value="Web Site Upgrade">My website upgraded</asp:ListItem> 
      <asp:ListItem Value="Application Design">An application </asp:ListItem> 
      <asp:ListItem Value="An ecommerce website">New Ecommerce website</asp:ListItem> 
      <asp:ListItem Value="Other">Other</asp:ListItem> 
     </asp:DropDownList> 
    </div> 
    <ul> 
     <li> 
      <asp:Label EnableViewState="false" ID="lblErrorMessage" runat="server"></asp:Label> 
     </li> 
     <li> 
      <asp:Label EnableViewState="false" ID="lblName" AssociatedControlID="txtName" runat="server" 
       Text="Name"></asp:Label> 
      <asp:TextBox ID="txtName" runat="server" ValidationGroup="ContactValidation"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidatorName" runat="server" ValidationGroup="ContactValidation" 
       ControlToValidate="txtName" ErrorMessage="Name is required">*</asp:RequiredFieldValidator> 
     </li> 
     <li> 
      <asp:Label ID="lblPhone" runat="server" AssociatedControlID="txtPhone" EnableViewState="false" 
       Text="Phone"></asp:Label> 
      <asp:TextBox ID="txtPhone" runat="server" ValidationGroup="ContactValidation"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidatorPhone" runat="server" ValidationGroup="ContactValidation" 
       ControlToValidate="txtPhone" ErrorMessage="Phone is required">*</asp:RequiredFieldValidator> 
     </li> 
     <li> 
      <asp:Label ID="lblEmail" runat="server" AssociatedControlID="txtEmail" EnableViewState="false" 
       Text="Email"></asp:Label> 
      <asp:TextBox ID="txtEmail" runat="server" ValidationGroup="ContactValidation"></asp:TextBox> 
      <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ValidationGroup="ContactValidation" 
       ControlToValidate="txtEmail" ErrorMessage="Email is required">*</asp:RequiredFieldValidator> 
      <asp:RegularExpressionValidator ID="RegularExpressionValidatorEmail" runat="server" 
       ControlToValidate="txtEmail" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" 
       ValidationGroup="ContactValidation" ErrorMessage="Email address is invalid">*</asp:RegularExpressionValidator> 
     </li> 
     <li> 
      <asp:Label ID="lblMsg" runat="server" AssociatedControlID="txtMsg" EnableViewState="false" 
       Text="How can we assist you?"></asp:Label> 
      <asp:TextBox ID="txtMsg" runat="server" TextMode="MultiLine" Rows="5" Wrap="true"></asp:TextBox> 
     </li> 
     <li> 
      <asp:Button ID="btnSubmit" runat="server" EnableViewState="false" CssClass="submit" 
       Text="Send" ValidationGroup="ContactValidation" OnClick="btnSubmit_Click" /> 
     </li> 
    </ul> 
</fieldset> 

A continuación, los únicos otros elementos que necesita para tener cuidado de no está en el web.config tiene que modificar la configuración de system.net para el correo electrónico:

<system.net> 
<mailSettings> 
    <smtp from="[email protected]"> 
    <network host="smtp.yourdomain.com" userName="Your_Username" password="Your_Password" port="25" /> 
    </smtp> 
</mailSettings> 
</system.net> 

A continuación, cargue el control o modifique su web.config. Luego, siempre que su servidor SMTP esté configurado correctamente, el formulario no debería enviar ningún problema.

Espero que esto te ayude.

+0

¡Gran respuesta, Sean! – Slavo

+0

Gracias Sean! Muy útil :-) –

+0

No hay problema, creo que tienes que marcar la mía como la respuesta, siempre y cuando creas que fue correcta;) –

2

Creo que un buen enfoque es utilizar el remitente de correo incorporado. Los beneficios son que se pueden configurar los ajustes dentro de la Administración-> Preferencias-> Avanzado-> Sistema-> SMTP

  var smtpSettings = Config.Get<SystemConfig>().SmtpSettings; 
      MailMessage message = new MailMessage();     

      message.From = new MailAddress(smtpSettings.UserName); 
      message.To.Add(new MailAddress(toEmail)); 

      StringBuilder sb = new StringBuilder(); 
      sb.AppendFormat(body); 
      message.Subject = subject; 
      message.Body = sb.ToString(); 
      message.IsBodyHtml = true; 
      message.BodyEncoding = Encoding.Unicode; 
      message.SubjectEncoding = Encoding.Unicode; 

      EmailSender.Get().Send(message); 

Puede utilizar las notificaciones también.

Cuestiones relacionadas