Introduction
This article describes a quick and easy way to test your email messages by 
relaying them through your existing Gmail account. This can be useful if you 
wish to test the appearance of an email message as delivered to an email account 
or just the entire work flow of a project that requires sending an email 
message. I would not recommend relaying all of an application's email messages 
through a Gmail account; in production you should send your messages through a 
properly configured SMTP server.
This article includes a class containing the code necessary to send an email 
message through your production SMTP server and to send your emails through your 
Gmail account for testing purposes or until you have the appropriate SMTP server 
configured for use. The package also includes a Windows Forms test application 
that you can use to send a test message through your Gmail account.
![gmail-relay.jpg]()
Figure 1: Test Application
Getting Started
In order to begin, unzip the downloaded files and open the project provided. 
Within the project you will find a simple Win Forms application written in C#; 
the application contains a single form used to collect the information needed to 
send an email. The application was built using Visual Studio 2012; the code 
would work equally well with Visual 2010.
The project also contains a class file entitled, "EmailHandler.cs". This file 
contains the code to send an email with or without attachments using either 
your SMTP server or an existing Gmail account.
The Code: EmailHandler.cs
Open this class file to examine its content. The class is divided into three 
regions, the code in each region applies to sending the message using an SMTP 
server or using a Gmail account, the last region contains utility code 
applicable to either set of code, in this case, the code contained there 
executes a regular expression test to validate that an email address is properly 
formatted.
The test application will use the code contained in this class to send an email 
message through a Gmail account. The code in the SMTP region won't be discussed 
herein, it works basically the same way as the Gmail specific code works but it 
is not tailored specifically to work with the required Gmail settings.
Looking at the Gmail code region you will find two methods, one to send an email 
message with attachments, and one to send an email message without attachments. 
If you need to send email messages with attachments, you might want to also 
examine the files, obtain their file sizes, and make certain that the target 
email account can handle messages large enough to accommodate the attachments. 
If you are not certain of the maximum allowable message sizes, as a rule of 
thumb it is a good idea to keep the total size of the message to below 5 MB as 
that is a common default setting. A simple example of checking the attachment 
accumulated file sizes is included in the demonstration application.
The first function contained in the Gmail section of the class is used to send a 
message without any attachments. The code follows and it is annotated to 
describe it:
public
static
string 
SendMessageThroughGmail(string 
sendTo, 
string 
sendFrom, 
string 
sendSubject, 
string 
sendMessage, 
string 
yourGmailAddress, 
string 
yourGmailPassword)
{
      
try
      {
          
// validate the email address
          
// against a regular expression
          
bool 
bTest = ValidateEmailAddress(sendTo);
 
          
// if the email address is bad, return message
          
if 
(bTest == 
false)
              
return
"Invalid recipient email address: " 
+ sendTo;
 
          
// create the email message 
          
MailMessage 
message = 
new
MailMessage(
             sendFrom,
             sendTo,
             sendSubject,
             sendMessage);
 
          
// create smtp client
          
SmtpClient 
client = 
new
SmtpClient();
          client.UseDefaultCredentials = 
false;
          
// create network credentials using the 
          
// gmail user ID (the email address) and the 
          
// gmail password
          client.Credentials = 
              
new 
System.Net.NetworkCredential(yourGmailAddress,
yourGmailPassword);
          client.Host = 
"smtp.gmail.com";
// fixed for gmail
          client.Port = 587; 
// gmail setting
          client.EnableSsl = 
true; 
// required for gmail relay
 
          
// send message
          client.Send(message);
 
          
return
"OK";
      }
      
catch 
(Exception 
ex)
      {
          
return 
ex.Message.ToString();
      }
  }
 The next code block is the same 
with the exception of accepting an array list of file paths representing the 
message attachments. It is also annotated to describe the contents.
public
static
string 
SendMessageWithAttachmentThroughGmail(string 
sendTo, 
string 
sendFrom, 
string 
sendSubject, 
string 
sendMessage, 
ArrayList 
attachments, 
string 
yourGmailAddress, 
string 
yourGmailPassword)
{
    
try
    {
        
// validate email address
        
bool 
bTest = ValidateEmailAddress(sendTo);
 
        
if 
(bTest == 
false)
            
return
"Invalid recipient email address: " 
+ sendTo;
 
        
// Create the basic message
        
MailMessage 
message = 
new
MailMessage(
           sendFrom,
           sendTo,
           sendSubject,
           sendMessage);
 
        
// The attachments array should point to a file location    
        
// where the attachment resides - add the attachment(s) 
        
// to the message
        
foreach 
(string 
attach 
in 
attachments)
        {
            
Attachment 
attached = 
new
Attachment(attach,
            
MediaTypeNames.Application.Octet);
            message.Attachments.Add(attached);
        }
 
        
// create smtp client
        
SmtpClient 
client = 
new
SmtpClient();
        client.UseDefaultCredentials = 
false;
        client.Credentials = 
new 
System.Net.NetworkCredential(yourGmailAddress,
yourGmailPassword);
        client.Host = 
"smtp.gmail.com";
        client.Port = 587;
        client.EnableSsl = 
true;
 
        
// send message
        client.Send(message);
 
        
return
"OK";
    }
    
catch 
(Exception 
ex)
    {
        
return 
ex.Message.ToString();
    }
}
The remainder of the code contained 
in this class is again either used to send email using your SMTP server or is 
used to validate the format of an email address using a regular expression. 
Refer to that code within the project to examine those parts.
Refer to the attached example application to test the class and see it in 
use. You can also review the code used to attach the file attachments in order 
to see one approach to testing the file attachment size to see if you need to 
warn the user about an oversized attachment.