In this article we are going to demonstrate how to generate and send emails with ASP. We will use CDOSYS – Microsoft’s improved interface for SMTP email which was introduced in Windows 2000.
Microsoft has discontinued the use of CDONTs on Windows 2000, Windows XP and Windows 2003. If you have used CDONTs in your ASP applications, you should update the code and use the new CDO technology.
Note that to send an email with ASP from a local machine you need the running IIS SMTP Virtual Server.
Let’s learn how to send emails from the following examples:
- Sending a text email
- Sending an HTML email
- Sending an email with an Attachment
- Sending an email using a remote server
- Sending an email via Gmail
- Load Recipients from a Database
- Set the priority/importance of an email and request a read/return receipt
Sending email with CDOSYS is a simple task. First you create a reference to the CDO component. Then fill-in From, Subject and To fields of the headers and the body text. Also you can add Bcc and Cc headers. Then you use the Send method to send the email. That’s all.
<%
Set Mail=CreateObject("CDO.Message")
Mail.Subject="Email subject"
Mail.From="[email protected]"
Mail.To="[email protected]"
Mail.Bcc="[email protected]"
[email protected]
Mail.ReplyTo ="[email protected]"
Mail.TextBody="This is an email message."
Mail.Send
set Mail =nothing
%>
The process is quite similar to sending the regular text message.
<%
Set Mail=CreateObject("CDO.Message")
Mail.Subject="Email subject"
Mail.From="[email protected]"
[email protected]
Mail.ReplyTo ="[email protected]"
Mail.HTMLBody = "<h1>This is an email message.</h1>"
Mail.Send
set Mail=nothing
%>
Sending an email with an Attachment
Please note, when using the .AddAttachment method in your scripts you must use a fully qualified pathname as the argument to the method. Using just a file name or a relative path will produce the error The specified protocol is unknown. By repeating the .AddAttachment method you can attach more than one file.
<%
Set Mail=CreateObject("CDO.Message")
Mail.Subject="Email subject"
Mail.From="[email protected]"
Mail.To="[email protected]"
Mail.TextBody="This is an email message."
Mail.AddAttachment "c:\mydocuments\test.txt"
Mail.Send
set Mail=nothing
%>
Sending an email using a remote server
Sometimes you need to send an email using another server. To accomplish that you need to set the configuration properties to the server.
<%
Set Mail = CreateObject("CDO.Message")
'This section provides the configuration information for the remote SMTP server.
'Send the message using the network (SMTP over the network).
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="mail.yourdomain.com"
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
'Use SSL for the connection (True or False)
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
'If your server requires outgoing authentication, uncomment the lines below and use a valid email address and password.
'Basic (clear-text) authentication
'Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'Your UserID on the SMTP server
'Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="[email protected]"
'Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="yourpassword"
Mail.Configuration.Fields.Update
'End of remote SMTP server configuration section
Mail.Subject="Email subject"
Mail.From="[email protected]"
Mail.To="[email protected]"
Mail.TextBody="This is an email message."
Mail.Send
Set Mail = Nothing
%>
<%
Set Mail = CreateObject("CDO.Message")
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="smtp.gmail.com"
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="[email protected]"
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="yourpassword"
Mail.Configuration.Fields.Update
Mail.Subject="Email subject"
Mail.From="[email protected]"
Mail.To="[email protected]"
Mail.TextBody="This is an email message."
Mail.Send
Set Mail = Nothing
%>
Load Recipients from a Database
This task may be accomplished in several ways. This is one of many methods.
For example, our database is an MS Access database stored on the local disk. We are interested in Customers table and Name and Email fields.
Set dbConnection = CreateObject("ADODB.Connection")
dbConnection.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=c:\Databases\Customers.mdb"
SQLQuery = "SELECT Name, Email FROM Customers"
Set Result = dbConnection.Execute(SQLQuery)
if Not Result.EOF then
Do While Not Result.EOF
SendMail Result("Name"), Result("Email")
Result.MoveNext
Loop
end if
dbConnection.Close
As you can see the code is simple. We create a database connection object then open the database and query it for the Name and Email fields of each customer. Those values are passed for each customer to the procedure that sends an email to the customer. Note that the recipient’s address is formatted as “Name” <ema[email protected]> for a more professional look to the recipient.
Sub SendMail(name, address)
Dim Message, SendTo
SendTo = Chr(34) & Name & Chr(34) & "<" & Address & ">"
Set Mail = CreateObject("CDO.Mail")
Mail.Subject = "Email subject"
Mail.From = "[email protected]"
Mail.To = SendTo
Mail.TextBody="This is an email message."
Mail.Send
Set Mail = Nothing
End Sub
Set the priority/importance of an email and request a read/return receipt
<%
Set Mail = CreateObject("CDO.Message")
' Set the priority/importance of an email
' For Outlook:
Mail.Fields.Item(cdoImportance) = cdoHigh
Mail.Fields.Item(cdoPriority) = cdoPriorityUrgent
' For Outlook Express:
Mail.Fields.Item("urn:schemas:mailheader:X-Priority") = 1
' Request a read/return receipt
' Read receipt
Mail.Fields("urn:schemas:mailheader:disposition-notification-to") = "[email protected]"
' Return receipt
Mail.Fields("urn:schemas:mailheader:return-receipt-to") = "[email protected]"
Mail.DSNOptions = 14
Mail.Fields.update
Mail.Subject = "Email subject"
Mail.From = "[email protected]"
Mail.To = "[email protected]"
Mail.TextBody="This is an email message."
Mail.Send
Set Mail = Nothing
%>
Possible values of the email priority and importance:
CDO Constant | Numeric Value | Definition |
cdoPriorityNonUrgent | -1 | Non-urgent priority |
cdoPriorityNormal | 0 | Normal priority |
cdoPriorityUrgent | 1 | Urgent priority |
cdoLow | 0 | Low importance |
cdoNormal | 1 | Normal importance |
cdoHigh | 2 | High importance |
Related information