Sending an Email
  
        Let's try an create an application which performs a useful function.
    
        Most web applications rely on using email to perform certain functions. For example,
        an eCommerce web site will send a confirmation email when an order has been processed,
        and probably when the order has been dispatched. When a user subscribes to a web
        site they may request their password be sent by email if they forget it. Fortunately,
        ASP.NET 2.0 has and inbuilt set of Web controls for handling the creation and sending
        of email. They also need to be handled using script code, so they provide a useful
        exercise in writing C# scripts.
    
        We will develop three simple email applications:
    
        - Sending a standard message automatically (FixedMail)
 - Sending a simple user configured message to a fixed email account (FeedbackMail)
 - Creating a generic email sender (SendMail)
 
    
        If we look at the C# code produced by default when you create a new Web Form you
      will see that each page makes use of a set of external resources. The code below
      is generated automatically when you create a new Web Form:
    using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}
  
    The 'using' clauses at the top of the code tell .NET to make available additional
    libraries. In the case of a simple web form these will include libraries for working
    with HTML, Web Controls and basic system configuration and security features. When
    we want to perform more specialised functions within our pages we need to include
    the names of the appropriate libraries. E.g. for working with images we may use:
    'System.Drawing'. .NET has a large set of built in libraries which you can build
    extra functionality into your web forms, the most important of which are probably
    the database connectivity libraries.
        
          For the email enabled pages in this session to
        work we must make sure that there is a using clause at the top of the each *.aspx.cs file,
        as follows:
    using System.Net.Mail;
    
        This process is simplified a little by the way Visual Studio 2008 helps 
		the developer. If you type the name of something which isn't available 
		in the current libraries you can right click it and choose 'Resolve' and 
		it will pop up the library entry and include it in your file when you 
		select it.
		
	
        FixedMail
  
    Many web applications automatically generate an email to the user to provide information
    of many sorts. For example, to send the user their password, to confirm receipt
    of an order, or to send an email newsletter (to a subscriber). The first application
    is a simplified example of sending a fixed email to a user. The user will usually
    be specified from a database, but in this case the email address is simply typed
    into a textbox on a simple web form.
    
        The SmtpClient class has a Send method which in one form takes as parameters
        four strings. The first string is the senders email address, the second is the recipients
        email address, the third is the subject of the email and the fourth is the body
        of the email message. A simple web form can be built with a text box for the email
        address of the recipient, and a button to cause an email to be sent to the person.
        Assume there is a button called butSend and a TextBox called txtEMailAddress. The
        code to send a fixed message to the person identified in the TextBox would be:
        protected void butSend_Click(object sender, EventArgs e)
{
      SmtpClient Mail = new SmtpClient("smtp.myISP.com");
      Mail.Send("[email protected]", txtEMailAddress.Text,
                "Test message", "Hello from admin");
}
    
      Note: the SmtpClient constructor needs the name of a valid SMTP server for it to
      work properly. You can use the same SMTP server that you have configured for your
      Internet Service Provider, or the one configured for your email account in Outlook
      or Outlook Express. As a last resort, you can also install an SMTP server on your
      own machine (try www.pmail.com for the Mercury email server) and use your own IP
      address.
        The above example is shown in application 
      FixedMail
      and makes use of the SMTP server for the web server hosting this tutorial. Download
      a
      ZIP version of FixedMail.
    
        Download, unzip, open and run FixedMail, type in your own email address and click the Send Mail Message
        button.
      Now check your own email to see if the message has arrived. Note: there may be a short delay, so if you do not receive the message first time check your account
      later. Don't forget to modify the SMTP server's address to match your 
		environment.
	
        Note: if your ISP requires a secure login for the SMTP Server you will 
		need to modify the above code as follows. Don't forget to change your 
		SMTP server and username and password to match your ISP:
     protected void butSend_Click(object sender, EventArgs e)
{
  SmtpClient Mail = new SmtpClient("smtp.myISP.com");
  mail.Credentials = 
           new NetworkCredential("username", "password"); 
  Mail.Send("[email protected]", txtEMailAddress.Text,
            "Test message", "Hello from admin");
}
    
        IMPORTANT: You should never send an email impersonating another
        user; this is a practice used by the worst sort of Internet fraudsters. A secure
        mail server will refuse to send an email which doesn't come from the same domain,
        but some systems are not secure. It is usual for a web application to send automatic
      email from an internal generic account ([email protected] in the example above) which
      is configured not to receive email. This account will usually be configured by the
      webmaster in liaison with the developer.
    
        FeedbackMail
  
    A lot of sites allow clients to send feedback in the form of an email. There has
    been a recent trend towards using a database to collect the information directly,
    however. In this scenario we are providing a user feedback facility which will fire
    off an email from the server to a site coordinator who will be responsible for monitoring
    and acting on user feedback.
    
        Let's use the simple version of the SmtpMail.Send method to allow a user to fire
        off some feedback to the site coordinator.
    
        Build a web form with three textboxes. One will be for the senders email address
        (txtSender). The second will be the subject of the email (txtSubject), and the third
        will be the body of the message (txtBody). The recipient will be the site administrator
        (in this case [email protected]). Add a button
        called butSend. In the event handler for clicking the button type the following
        code:
    protected void butSend_Click(object sender, EventArgs e)
{
      SmtpClient Mail = new SmtpClient("smtp.myISP.com");
              Mail.Send("[email protected]", txtSender.Text,
              txtSubject.Text,txtBody.Text);
}
    
      Don't forget to put the using clause at the top of the .aspx.cs file to link to
      the System.Net.Mail library. If you want to try out application FeedbackMail you
      will need to replace the email address '[email protected]' with an email address
      of your own, so that you can check that the system works. For testing purposes you
      can put a fictitious email address for the sender, as you will be the recipient.
      You will need to check your email system for an email from the fictitious account.
      Download a
      ZIP version of FeedbackMail.
    
        SendMail
  
    The previous examples used the basic variant of the SmtpMail.Send method. The other
    method takes a single parameter of type MailMessage.
    
        MailMessage
        is a class with properties which allow you to specify all the fields for an email
        message, not just From, To, Subject and Body. With a MailMessage object you can
        easily specify fields such as Cc and Bcc fields as well as attachments.
      It also handle multiple recipients.
    
        Now we build a form with text boxes for From, To, CC, Bcc, Subject and Body, called
      txtTo, txtFrom, txtCC, txtBCC, txtSubject and txtBody. Note: the 'To' field can
      contain a list of email address separated by commas, and the 'CC' and 'Bcc' fields
      may be empty, but could contain lists of email addresses. The code will need to
      check if there are any values for CC or Bcc before trying to add them to the MailMessage
      object.
  
    The send button has the following code:
    protected void butSend_Click(object sender, EventArgs e)
{
    MailMessage Mess = new MailMessage();
    Mess.From = new MailAddress(txtFrom.Text);
    Mess.To.Add(txtTo.Text);
    if (txtCC.Text != "")
    {
        Mess.CC.Add(txtCC.Text);
    }
    if (txtBCC.Text != "")
    {
        Mess.Bcc.Add(txtBCC.Text);
    }
    Mess.Subject = txtSubject.Text;
    Mess.Body = txtBody.Text;
    SmtpClient mail = new SmtpClient("smtp.mydomain.com");
    mail.Send(Mess);
}
    
        Download a
      ZIP version of SendMail.