|
How to use ASP mail from VBScript?
Simple
Mail Example:
ASP Mail Samples With
Perl scripts Included -
Using
the component is as simple as:
- Creating
the object
- Setting
a few properties
- Calling
the SendMail method
The
following code demonstrates how to use AspMail from VBScript. In this
example Joe from Joe’s Widgets wishes to send an email to John
Smith. Joe’s mail server is located at mailhost.localisp.net.
Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Mailer.FromName = "Joe’s Widgets Corp."
Mailer.FromAddress= "Joe@somehost.com"
Mailer.RemoteHost = "mailhost.localisp.net"
Mailer.AddRecipient "John Smith", "jsmith@anotherhostname.com"
Mailer.Subject = "Great SMTP Product!"
Mailer.BodyText = "Dear Stephen" & VbCrLf &
"Your widgets order has been processed!"
if Mailer.SendMail then
Response.Write "Mail sent..."
else
Response.Write "Mail send failure. Error was " &
Mailer.Response
end if
By
testing the result of the SendMail method we can determine if the
mailing process was successful or not.
Form
Handling
All
or partial input for a message may come from a form. For example, a
form posted to the server with a request method of GET (i.e.
<form action="/scripts/AspMail.asp" method=get>) may
provide the message recipient’s email address, subject and message
text as follows:
Mailer.AddRecipient Request.QueryString("ToName"), Request.QueryString("ToAddress")
Mailer.Subject = Request.QueryString("Subject")
Mailer.BodyText = Request.QueryString("MsgBody")
The
form may also use the POST method (i.e. <form
action="/scripts/AspMail.asp" method=post>) in which case the
code would look as follows:
Mailer.AddRecipient Request.Form("ToName"), Request.Form("ToAddress")
Mailer.Subject = Request.Form ("Subject")
Mailer.BodyText = Request.Form ("MsgBody")
You
can use any mixture of static and dynamic data in setting the
components properties as dictated by your needs. For example, you
may wish to send the mail to a single user. In this case you could
modify the code to look something like this:
Mailer.AddRecipient "John Smith", "jsmith@alocalhost.com"
Mailer.Subject = Request.QueryString("Subject")
Mailer.BodyText = Request.QueryString("MsgBody")
Generic
Form Handling
In
some cases users may wish to use a number of different forms to send
email with the same block of code. ASP allows you to loop through
each QueryString or Form variable and append each one to string
variable which is then assigned to the BodyText property. Please note:
AspMail cannot control the order that these variables are returned in.
This is a function of ASP, not AspMail. ASP takes the form variables
and creates the appropriate Request collection (QueryString or Form)
and stores the data in an order that AspMail cannot change. If you
use this method you must accept ASP's order.
strMsgHeader = "Form information follows" & vbCrLf
for each qryItem in Request.QueryString
strMsgInfo = strMsgInfo & qryItem & " - " & request.querystring(qryItem) & vbCrLf
next
strMsgFooter = vbCrLf & "End of form information"
Mailer.BodyText = strMsgHeader & strMsgInfo & strMsgFooter
Setting
Mail Priority
There
are a couple of headers that can be modified to set message
priority.
The
Priority property sets the message priority on a scale of 1
to 5. A priority of 1 means HIGH. A priority of 3 means NORMAL and a
priority of 5 means LOW. In addition to this you can also set the Urgent
property if the message status is urgent. The Urgent property is a
true/false property.
How
to Use the DateTime Property
The
component creates a Date/Time value for the message based on the
calculated GMT time. The DateTime property was added to allow users
to set a custom date/time timezone. The following code demonstrates
how to set the DateTime to US Central Standard Time. By slightly altering
the code you can adjust this to work for your own timezone.
function
DayName (intDay)
select case intDay
case 1
DayName = "Sun"
case 2
DayName = "Mon"
case 3
DayName = "Tue"
case 4
DayName = "Wed"
case 5
DayName = "Thu"
case 6
DayName = "Fri"
case 7
DayName = "Sat"
end select
end function
function MonthName (intMonth)
select case intMonth
case 1
MonthName = "Jan"
case 2
MonthName = "Feb"
case 3
MonthName = "Mar"
case 4
MonthName = "Apr"
case 5
MonthName = "May"
case 6
MonthName = "Jun"
case 7
MonthName = "Jul"
case 8
MonthName = "Aug"
case 9
MonthName = "Sep"
case 10
MonthName = "Oct"
case 11
MonthName = "Nov"
case 12
MonthName = "Dec"
end select
end function
[set other Mailer properties]
Mailer.DateTime = DayName (WeekDay(Date)) & ", " &
Day(Date) & " " & MonthName(Month(Date)) & "
" & Year(Date) & " " & FormatDateTime(Now, 4)
& " -0600 (CST)"
Mailer.SendMail
Notes
About Creating the Mailer Object
You
can create the mailer object at two different points in time:
You
will have to decide when and where it is appropriate to create the
object based on your particular application. If you aren't sure
which way to create the object reference, or for typical usage, you
should create the object immediately before sending your email. Your
code would look like this:
Set
Mailer = Server.CreateObject("SMTPsvg.Mailer")
... [Set properties]
if Mailer.SendMail then ...
Creating
these local references, as demonstrated above, allow you to use
the object on multiple application threads at the same time.
To
create an object reference at the session level, your code might
look something like this:
if
Not IsObject (session("Mailer")) then
Set Mailer = Server.CreateObject("SMTPsvg.Mailer")
Set session("Mailer") = Mailer
else
Response.write "Cached session object reference being
used<p>"
Set Mailer = session("Mailer")
end if
Multiple
Host Support
AspMail
provides one host property to set up remote SMTP server addresses.
The RemoteHost property should be set to your primary and
secondary server’s address separated by semicolons. In the event
that the primary server is down, AspMail will attempt to use the
secondary server. For example,
Mailer.RemoteHost
= "mailhost.localisp.com;mailhost.anotherisp.com"
ASP mail
properties
|
Property
|
Description
|
|
BodyText
|
The
message body text. To clear the text once you have
set it use the ClearBodyText Method.
Example:
Mailer.BodyText
= "Your order for 15 widgets has been
processed"
|
|
CharSet
|
The
character set. By default the char set is US Ascii
Valid
values:
1
= US Ascii
2
= ISO-8859-1
Example:
Mailer.CharSet
= 2
|
|
ConfirmRead
|
The
ConfirmReading flag. If this is set to true AND
the recipients email program supports
this
feature (and it is enabled) the recipients email
program will send a notice back to the FromAddress
confirming that this email has been read.
Example:
Mailer.ConfirmRead
= true
|
|
ContentType
|
The
ContentType property allows you to set the
ContentType header of the message's BodyText. If, for
example, you wanted to send HTML as the messages's
body, you could set ContentType =
"text/html" and EMail programs that support
HTML content could properly display the HTML text.
Note:
The ContentType property is ignored if you have
file attachments.
Example:
Mailer.ContentType
= "text/html"
|
|
CustomCharSet
|
If
you wish to use a character set besides the
included types you can set CustomCharSet to a character
set string.
Example:
Mailer.CustomCharSet
= "ISO-2022" or
Mailer.CustomCharSet = "big5"
|
|
DateTime
|
AspMail
will, by default, create a Date/Time header for
your local system using GMT. If you would like to
override the date/time calculation set the
DateTime property to a valid date/time string in
the format defined by RFC 822 & RFC 1123.
Example:
Mailer.DateTime
= "Fri, 02 May 1997 10:53:49 -0500"
|
|
Encoding
|
The
encoding type for attachments. The default setting
is MIME.
Valid
values:
1
= UUEncoded
2
= MIME
Example:
Mailer.Encoding
= 1
|
|
Expires
|
If
the component is an eval version the expires
property will return the date that the component quits
functioning.
Example:
Response.Write
"Component Expires: " &
Mailer.Expires
|
|
FromName
|
The
message originator’s name.
Example:
Mailer.FromName
= "Joe’s Widget Shop"
|
|
FromAddress
|
The
message originator’s email address.
Example:
Mailer.FromAddress
= "joe@widgets.com"
|
|
IgnoreMalformedAddres
s
|
Defaults
to false. When false AspMail will check for '@' in
the email address for calls to AddRecipient, AddCC and
AddBCC. An error would be returned in the Response
property. When this property is set to true
AspMail will not perform any address syntax
validation. If you are using AspMail to send a message
through an SMS gateway or fax system you may need
to set this property to true.
|
|
IgnoreRecipientErrors
|
Defaults
to true. If true AspMail will ignore error
messages returned by the SMTP server for invalid
addresses. This is useful when a mailing is
addressed to a number of recipients.
|
|
Live
|
Live
allows you to test the component without an SMTP
server. If Live is set to false then the NET SEND
message will be executed with the FromName
property being used as the recipient of the
message. Only the subject is sent to the recipient.
Example:
Mailer.FromName
= "ASPProgrammer"
Mailer.Live = false
|
|
Organization
|
Sets
the Organization header in the message.
Example:
Mailer.Organization
= "Your Company Name"
|
|
PGPPath
|
The
path where PGP is located.
|
|
PGPParams
|
Parameters
that PGP will use to process message.
|
|
Priority
|
Sets
the message priority. Priorities are 1-5 and are
reflected in the X-Priority
Valid
values:
1
– High
3
– Normal
5
– Low
Example:
Mailer.Priority
= 1
|
|
RemoteHost
|
The
remote SMTP host that the message will be sent
through. This is typically an SMTP server located at
your local ISP or it could be an internal SMTP
server on your companies premises. Up to 3 server
addresses can be specified, seperated by a
semicolon. If the primary server is down the component
will attempt to send the mail using the seconary
server and so on.
Example:
Mailer.RemoteHost
= "mailhost.myisp.net" or
Mailer.RemoteHost
= "mailhost.myisp.net;
mailhost.myotherisp.net"
|
|
RemoveXHeaders
|
To
remove any extra XHeaders such as the AspMail
software header set RemoveXHeaders to true. (Version
>= 3.00)
Example:
Mailer.RemoveXHeaders
= true
|
|
ReplyTo
|
The
ReplyTo property allows you to specify a different
email address that replies should be sent to. By default
mail programs should use the Reply-To: header for
responses if this header is specified.
|
|
Response
|
The
Response property returns any error messages that
may occur.
|
|
ReturnReceipt
|
The
ReturnReceipt flag. If this is set to true AND the
recipients SMTP server supportsthis feature (and it is
enabled) the recipients SMTP server will send a
notice back to the FromAddress confirming that this
email has been delivered.
Example:
Mailer.ReturnReceipt
= false
|
|
SMTPLog
|
If
you need to debug the session give a log file name
here. Make sure the IUSR_XYZ IIS user has security
that allows the component to write to this file.
Warning: Do not use this setting in situations
where multiple users can access this component at
the same time. This is for single user debugging
ONLY!
Example:
Mailer.SMTPLog
= "c:\smtplog.txt"
|
|
Subject
|
The
message subject.
Example:
Mailer.Subject
= "Stock split announced!"
|
|
SuppressMsgBody
|
The
SuppressMsgBody property is true by default and is
used in conjuction with the SMTPLog property. When
SMTPLog is set to a file and SuppressMsgBody is
true the log file receives a copy of the message
text. If SuppressMsgBody is false the message text is
not sent to the log.
|
|
TimeOut
|
Timeout
is the maximum time that AspMail should wait for a
response from the remote server. The default is 30
seconds.
Example:
Mailer.Timeout
= 15
|
|
Urgent
|
The
urgent flag sets the X-Urgent header in the
outgoing message. Not all mail readers support this
flag.
Example:
Mailer.Urgent
= true
|
|
UseMSMailHeaders
|
MS-Mail
priority headers, by default, are sent in addition
to the standard SMTP priority headers. You can
turn MS-Mail headers off with this property
Example:
Mailer.UseMSMailHeaders
= false
|
|
Version
|
Gets
the internal component version number.
Example:
Response.Write
"Component Version: " &
Mailer.Version
|
|
WordWrap
|
The
WordWrap property is off by default. Setting
WordWrap to true causes the message body to wordwrap at
the position specified by the WordWrapLen
property.
|
|
WordWrapLen
|
The
WordWrapLen property is set to 70 by default. You
can modify the position that wordwrap occurs by changing
this value.
|
|
AspMail Component
Methods
|
Method
|
Parameters
|
Return
Value
|
Description
|
|
SendMail
|
None
|
True
or False
Example:
if
Mailer.SendMail then
Response.Write
"Mail sent..."
else
Response.Write
"Mail failure. Check mail host server name
and tcp/ip connection..."
end
if
|
The
SendMail method attempts to send the email.
|
|
AddRecipient
|
Mailer.AddRecipient
"Jay Jones", "jayj@somehost.net"
|
True/False
based upon success or failure.
|
Adds
a new recipient, as shown in the message's To:
list.
|
|
ClearRecipients
|
None
|
None
|
Clears
any recipients assigned to the To list.
|
|
AddCC
|
Mailer.AddCC
"Jay Jones", "jayj@somehost.net"
|
True/False
based upon success or failure.
|
Adds
a new recipient, as shown in the message's CC list.
|
|
ClearCCs
|
None
|
None
|
Clears
any recipients assigned to the CC list.
|
|
AddBCC
|
Mailer.AddBCC
"Jay Jones", "jayj@somehost.net"
|
True/False
based upon success or failure.
|
Adds
a new Blind Carbon Copy recipient. BCC recipients are
not shown in any message recipient list.
|
|
ClearBCCs
|
None
|
None
|
Clears
any recipients assigned to the BCC list.
|
|
ClearAllRecipients
|
None
|
None
|
Clears
all recipients assigned to the To, CC and BCC lists.
|
|
AddAttachment
|
Filename
to attach to message.
Example:
Mailer.AddAttachment
"d:\shipping\proddsk1.zip"
|
N/A
|
Adds
attachments to current mailing. You must use an
explicit path to attach files.
Make
sure that the IUSR_XYZ IIS user, or the
authenticated user has security rights that allow the
component to read the necessary files! Note:
Attachments may not be supported in some eval
versions.
|
|
ClearAttachments
|
None
|
None
|
Clears
any attachments that were previously set.
Example:
Mailer.ClearAttachments
|
|
ClearBodyText
|
None
|
None
|
Clears
any text assigned to the message’s body which
may have been set previously by using the BodyText
property.
|
|
ClearExtraHeaders
|
None
|
None
|
Clears
any X-Headers that were set by use of
AddExtraHeader.
|
|
AddExtraHeader
|
A
string value that forms a proper SMTP X-Header
Example:
Mailer.AddExtraHeader
("X-HeaderName: XHdrValue")
|
True
or false. Returns true if X-Header was added.
|
Adds
extra X-Headers to the mail envelope.
|
|
GetBodyTextFromFile
|
See
pgpmail.asp for more information.
|
See
pgpmail.asp for more information.
|
Loads
message's body text from a file. Optionally runs
PGP on the message text.
See
pgpmail.asp for more information.
|
|
EncodeHeader
|
strValue
|
strValue
encoded as String
|
Encodes
a string in RFC1522 format to provide support for
8bit mail headers such as 8bit subject headers.
Example:
Mailer.Subject
= Mailer.EncodeHeader("Réspons e de Service
à la clientèle")
|
|
GetTempPath
|
N/A
|
strPath
|
Returns
the path set up by the OS for temporary mail
files.
|
|
|