Click here to Skip to main content
15,891,136 members
Articles / Web Development / ASP.NET
Article

ASP.NET email with multiple attachments

Rate me:
Please Sign up or sign in to vote.
4.28/5 (33 votes)
25 Jan 20053 min read 320K   7.2K   83   52
A simple web form that lets the user upload multiple attachments to create and send email.

Image 1

Introduction

This application demonstrates the use of some simple but useful things you can do with ASP.NET; uploading, saving and deleting files, and sending email.

Background

There are three things we need to do to be able to run this code and I'm going to assume that you will be trying out this code at home on a Windows desktop computer.

First, you need to create a virtual directory in IIS to host this web application and set write permission because we will be saving and deleting files that will be email attachments. In the virtual directory, create a folder called "attachments". This is where we will temporarily store the uploaded files to attach to the email.

The second thing to do is to make sure that the SMTP server is running and that it can relay mail. From the IIS MMC window, with "local computer" selected on the left, you should see the "Default SMTP Virtual Server", if not you need to install it. Right-click it, go into "Properties", the "Access" tab, and click the "Relay" button. With the "only the list below" radio button selected, you should see the local IP address: 127.0.0.1, if it's not there, you need to add it.

The last thing is to set up the SMTP server in the application. In the code, look for this line (line # 149):

C#
SmtpMail.SmtpServer = "localhost";

You need to replace "localhost" with the name or IP address of your SMTP mail server. On a Windows desktop computer, "localhost" is the default value and usually works.

Using the code

First of all, we create a new MailMessage object and we call it "email". Then we set the From, To, Subject and Body properties as well as the BodyFormatof of this object to the values on our web form.

C#
// Create a new blank MailMessage
 MailMessage email = new MailMessage ();

// Set the properties of the MailMessage to the
// values on the form
 if (rblMailFormat.SelectedItem.Text == "text")
  email.BodyFormat = MailFormat.Text;
 else
  email.BodyFormat = MailFormat.Html;
 email.From = txtSender.Text;
 email.To = txtReceiver.Text;
 email.Subject = txtSubject.Text;
 email.Body = txtBody.Text;

Now for the meat and potatoes of this little web application; the following block of code checks the first of three Open File Dialogs of our web form (the Open File Dialog is an HTML File Field control to which we've added the runat="server" property). If there is a value, the file is uploaded, saved on the server, and added as an attachment to the email. The processing of the two other Open File Dialogs are just the same.

C#
// Beginning of attachments processing
// Check the first open file dialog for a value
 if (ofdAttachment1.PostedFile != null)
 {
  // Get a reference to PostedFile object
  HttpPostedFile ulFile = ofdAttachment1.PostedFile;
  // Get size of the file
  int nFileLen = ulFile.ContentLength; 
  // Make sure the size of the file is > 0
  if( nFileLen > 0 )
  {
   // Get the file name
   strFileName = Path.GetFileName(ofdAttachment1.PostedFile.FileName);
   // Preced the file name with "attachments/" so 
   // the file is saved to our attachments directory
   strFileName = "attachments/" + strFileName;
   // Save the file on the server
   ofdAttachment1.PostedFile.SaveAs(Server.MapPath(strFileName));
   // Create the email attachment with the uploaded file
   MailAttachment attach = new MailAttachment(Server.MapPath(strFileName));
   // Attach the newly created email attachment
   email.Attachments.Add(attach);
   // Store filename so we can delete it later
   attach1 = strFileName;
  }
 }

Then we send the email and finish by deleting the attachments.

C#
// Set the SMTP server and send the email
 SmtpMail.SmtpServer = "localhost";
 SmtpMail.Send (email);

// Delete the attachements if any
 if (attach1 != null)
  File.Delete(Server.MapPath(attach1));

Points of Interest

This little project shows a practical use of the System.Web.HttpPostedFile and the System.Web.Mail.SmtpMail objects. The HttpPostedFile object is probably the simplest way to let a web user upload a file. I also tried to create the file attachment using a FileStream, hoping that I would be able to create the attachment without having to first save the file. I haven't figured that one out yet.

History

I've made a minor update to this article and the code, but it's basically the same application. Someone pointed out that I hadn't included the line that adds "attachments/" to the beginning of the filename for the second and third attachments. That's the only thing that has changed in the code. I've also made a few small changes to my explanations and comments.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Canada Canada
I have been working with different web technologies (ASP, ASP.NET, ColdFusion, Perl/CGI) for the past 15 years. I live in Montreal, where I work for a little consultant group specializing in Microsoft technologies.

Comments and Discussions

 
Questiontell me how to create inbox?? Pin
saeee4-Mar-07 23:23
saeee4-Mar-07 23:23 
Questionhow can i recieve email at local server Pin
saeee27-Feb-07 21:02
saeee27-Feb-07 21:02 
AnswerRe: how can i recieve email at local server Pin
Luc Archambault28-Feb-07 7:28
Luc Archambault28-Feb-07 7:28 
GeneralRe: how can i recieve email at local server Pin
saeee4-Mar-07 18:22
saeee4-Mar-07 18:22 
GeneralRe: how can i recieve email at local server Pin
saeee8-Mar-07 21:28
saeee8-Mar-07 21:28 
GeneralCompilation error Pin
Rolf6729-Jul-06 20:32
Rolf6729-Jul-06 20:32 
GeneralRe: Compilation error Pin
Tiux15-Jun-07 8:43
Tiux15-Jun-07 8:43 
QuestionNot Compatible With ASP.NET 2.0? Pin
Ozma619-Apr-06 9:18
Ozma619-Apr-06 9:18 
I'm using Visual Studio 2005 Pro
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727
Microsoft Visual C# 2005 77626-009-0385624-41032
Microsoft Visual C# 2005
Microsoft Visual Web Developer 2005 77626-009-0385624-41032
Microsoft Visual Web Developer 2005

I created a website and copied the source files there. Then I compiled it, resulting in 37 Errors and 10 Warnings:

MSG-TYPE&NUMBER DESCRIPTION FILE LINE COLUMN
[a bunch of messages about Validation (XHTML 1.0 Transitional) errors]
Error 46 Could not load type 'MailWebService.WebForm1'. Send.aspx 1
Warning 47 Attribute 'Codebehind' in the @ Page directive is no longer supported. Convert this page to the new code-behind model by opening the Web site (project) containing the page in Visual Web Developer. Send.aspx 1 24


When I changed 'CodeBehind' to 'CodeFile', Warning 47 was replaced with:
Error 47 Missing partial modifier on declaration of type 'MailWebService.WebForm1'; another partial declaration of this type exists Send.aspx.cs 21 15

I kept fixing new errors until the code compiled, albeit with several validation warnings about System.Web.Mail being obsolete.


Any ideas what to do about this? Confused | :confused:

Thanks,

OZma
"Time flies when you don't know what you're doing."
AnswerRe: Not Compatible With ASP.NET 2.0? Pin
Luc Archambault19-Apr-06 11:52
Luc Archambault19-Apr-06 11:52 
Questionhments.NET mail server Pin
onlyelnaz28-Feb-06 21:19
onlyelnaz28-Feb-06 21:19 
GeneralERROR RUNNING IT Pin
nguyenhh15-Sep-05 14:19
nguyenhh15-Sep-05 14:19 
GeneralRe: ERROR RUNNING IT Pin
Vasudevan Deepak Kumar30-Oct-05 23:10
Vasudevan Deepak Kumar30-Oct-05 23:10 
Generalquestion about compiling. Pin
jeniveve3624-Jun-05 5:27
jeniveve3624-Jun-05 5:27 
GeneralRe: question about compiling. Pin
Vasudevan Deepak Kumar30-Oct-05 23:12
Vasudevan Deepak Kumar30-Oct-05 23:12 
GeneralAttachments from desktop Pin
majanjua13-Jun-05 7:28
majanjua13-Jun-05 7:28 
GeneralRe: Attachments from desktop Pin
berndmarquard16-Jan-06 1:00
berndmarquard16-Jan-06 1:00 
GeneralThis is great Pin
Anonymous11-May-05 1:01
Anonymous11-May-05 1:01 
Generalcan't send email Pin
dexom9-Apr-05 17:19
dexom9-Apr-05 17:19 
GeneralRe: can't send email Pin
Member 267998925-Apr-05 8:14
Member 267998925-Apr-05 8:14 
GeneralRe: can't send email Pin
MIRo2k28-Sep-05 1:09
MIRo2k28-Sep-05 1:09 
GeneralRe: can't send email Pin
Vasudevan Deepak Kumar30-Oct-05 23:14
Vasudevan Deepak Kumar30-Oct-05 23:14 
GeneralRe: can't send email Pin
munu88-Nov-05 20:09
munu88-Nov-05 20:09 
GeneralSending Email Pin
ulricht16-Feb-05 9:43
ulricht16-Feb-05 9:43 
GeneralRe: Sending Email Pin
Luc Archambault17-Feb-05 13:02
Luc Archambault17-Feb-05 13:02 
Generalmissing line Pin
vladsoti24-Jan-05 8:43
vladsoti24-Jan-05 8:43 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.