AspEmail Manual Chapter 3. Attachments
Contents
3.1 The AddAttachment Method
AspEmail enables your application to send email messages with one or many file attachments. To add an attachment to a message, use the method AddAttachment, which expects a full physical path to the file being attached.
The following code sample demonstrates the usage of this method:
' change to address of your own SMTP server
strHost = "mail.elinkisp.com"
If Request("Send") <> "" Then
Set Mail = Server.CreateObject("Persits.MailSender")
' enter valid SMTP host
Mail.Host = strHost
Mail.From = "info@persits.com"
Mail.FromName = "Persits Software, Inc."
Mail.AddAddress Request("To")
' Attach two files in the same directory (any file type can be attached)
strPath = Server.MapPath(".")
Mail.AddAttachment strPath & "\ps_logo.gif"
Mail.AddAttachment strPath & "\wehave.gif"
' message subject
Mail.Subject = "Logo & Motto"
' message body
Mail.Body = "Persits Software logo and motto images are attached."
Mail.Send ' send message
Response.Write "Success!"
End If
%>
<HTML>
<BODY BGCOLOR="#FFFFFF">
<FORM ACTION="Attachments.asp">
Enter email: <INPUT TYPE="TEXT" NAME="To">
<INPUT TYPE=SUBMIT NAME="Send" VALUE="Send">
</FORM>
</BODY>
</HTML>
Click the links below to run this code sample:
3.2 Memory Attachments (AddAttachmentMem Method)
Starting with AspEmail 5.0, files can be attached not only from disk but also from memory. For example, if your application stores images in the database as blobs, you can attach a database-stored image to a message directly, without first exporting the file to the server's hard drive. This enables you to skip a costly step, and avoid file name collisions.
Memory files are attached via the method AddAttachmentMem which expects two arguments: a filename and a memory blob to copy the file content from. The second argument must be a Variant safe array of bytes.
The following code sample attaches images stored in a MS Access database IMAGES.MDB which is included with the installation. To learn more about storing files in the database as blobs, read this chapter of the Persits Software AspUpload manual.
' change to address of your own SMTP server
strHost = "smtp.myisp.net"
If Request("Send") <> "" Then
' Connect to database
strDbPath = Server.MapPath(".") & "\images.mdb"
ConnectStr = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & strDbPath
Set rs = Server.CreateObject("adodb.recordset")
rs.Open "images", ConnectStr, 2, 3
If rs.EOF Then
Response.Write "Recordset is empty."
Response.End
End If
' Create instance of AspEmail
Set Mail = Server.CreateObject("Persits.MailSender")
' enter valid SMTP host
Mail.Host = strHost
Mail.From = "info@persits.com"
Mail.FromName = "Persits Software, Inc."
Mail.AddAddress Request("To")
' Attach files stored in database as blobs
While Not rs.EOF
Mail.AddAttachmentMem rs("name").Value, rs("blob").Value
rs.MoveNext
Wend
' message subject
Mail.Subject = "Memory Attachments"
' message body
Mail.Body = "Files from the Database are attached."
Mail.Send ' send message
Response.Write "Success!"
End If
%>
<HTML>
<BODY BGCOLOR="#FFFFFF">
<FORM ACTION="AttachBlobs.asp">
Enter email: <INPUT TYPE="TEXT" NAME="To">
<INPUT TYPE=SUBMIT NAME="Send" VALUE="Send">
</FORM>
</BODY>
</HTML>
Click the links below to run this code sample:
3.3 Uploading Attachments with AspUpload
Code samples above assume that files being attached are already located on the server. However, if a file to be attached is on a client's machine, it must first be uploaded to the Web server, or it cannot be attached.
To upload a file to the server, you may use any upload component. We recommend Persits Software AspUpload®, a free evaluation copy of which can be downloaded from here.
The following code sample demonstrates the usage of AspEmail/AspUpload tandem:
' change to address of your own SMTP server
strHost = "mail.elinkisp.com"
' We use AspUpload component to capture uploaded file and access other form items.
' Because of the special ENCTYPE attribute we can no longer use Request.Form,
' we must use Upload.Form instead.
' More more info on AspUpload, visit www.aspupload.com.
Set Upload = Server.CreateObject("Persits.Upload")
Upload.IgnoreNoPost = True
' capture an upload and save uploaded files (if any) in temp directory
Upload.Save "c:\upload"
' We cannot use Upload.Form or Upload.Files until Upload.Save is called.
If Upload.Form("Send") <> "" Then
Set Mail = Server.CreateObject("Persits.MailSender")
Mail.From = "info@persits.com"
Mail.FromName = "Attachment Demo"
Mail.Host = strHost
Mail.Subject = Upload.Form("Subject")
Mail.Body = Upload.Form("Body")
Mail.AddAddress Upload.Form("To")
' Handle attached file via Upload.Files collection.
' Check if a file was ineed uploaded
If Not Upload.Files("Attachment") Is Nothing Then
Mail.AddAttachment Upload.Files("Attachment").Path
End If
' We are done. Send message
Mail.Send
Response.Write "Success!"
End If
%>
<HTML>
<BODY BGCOLOR="#FFFFFF">
<!-- Note special ENCTYPE attribute: it is necessary to upload a file-->
<FORM METHOD="POST" ACTION="UploadAttachment.asp" ENCTYPE="multipart/form-data">
<TABLE CELLSPACING=0 CELLPADDING=0>
<TR><TD>Enter email:</TD><TD><INPUT TYPE="TEXT" NAME="To"></TD></TR>
<TR><TD>Enter Subject:</TD><TD><INPUT TYPE="TEXT" NAME="Subject"></TD></TR>
<TR><TD>Enter Body:</TD><TD><TEXTAREA NAME="Body"></TEXTAREA></TD></TR>
<TR><TD>Select File Attachment:</TD><TD><INPUT TYPE=FILE NAME="Attachment"></TD></TR>
<TR><TD COLSPAN=2><INPUT TYPE=SUBMIT NAME="Send" VALUE="Send"></TD></TR>
</TABLE>
</FORM>
</BODY>
</HTML>
Click the links below to run this code sample (ASP and ASP.NET versions, respectively):
3.4 Using Memory Uploads with Memory Attachments
AspUpload is capable of uploading files to memory rather than saving them to disk. You can combine this feature with AspEmail's memory attachments to attach files directly from memory for better performance and security.
To use memory uploads, the method Upload.Save should be called without arguments. The binary content of a file is accessed via the property File.Binary.
Instead of
Mail.AddAttachment Upload.Files("Attachment").Path
End If
the following code should be used:
....
Set File = Upload.Files("Attachment")
If Not File Is Nothing Then
Mail.AddAttachmentMem File.FileName, File.Binary
End If ...
The code samples UploadAttachmentMem.asp and UploadAttachmentMem.aspx demonstrate this memory uploads/memory attachment technique. Click the links below to run this code sample.