ASP CDO with Amazon SES

Posted on 2014-11-22
Medium Priority
Last Modified: 2014-12-09
I am trying to move a script that uses CDO over from using SMTP.com mail relay to using Amazon SES service.

The code was working previously with SMTP, but the configuration of SMTP.com was set to allow all requests from the web server IP that the code is sitting on.  With Amazon SES this isnt possible and you have to authenticate.  SES doesnt allow anything but SSL/TLS connections, hence why i think its failing.

The code is:

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")= "email-smtp.us-east-1.amazonaws.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") ="un"
    Mail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="pw"

    'update the configuration options
	Mail.From = "info@xxx.com"
	Mail.To = strSendTo
	Mail.Bcc = Bcc
	Mail.Cc = Cc
	Mail.Subject = strSubject 
		IF BodyFormat = 1 THEN
			Mail.TextBody = strMessage
		ELSEIF BodyFormat = 0 THEN
			Mail.HtmlBody = strMessage
Set Mail = Nothing

Open in new window

If i use the code above, it fails with:

error '80040211'
/pages/processing/process_let_us_contact.asp, line 36

Any idea how i can get ASP classic to work with AWS SES?

I have tried switching to port 25 and the problem is the same.

Question by:net-workx
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
LVL 53

Accepted Solution

Scott Fell,  EE MVE earned 2000 total points
ID: 40459589
What you have looks good.  Are you 100% sure you have AWS SES set up correctly? Paid etc?

I have used sendgrid for this type of thing and  now mandrill.  Mandrill is free for the first 11,000 monthly emails and I would suggest using this or sendgrid for better deliverability.

This is what I use for mandrill
theHtml = "<table>full email html</table>"

' Set stuff up here
Const cdoSendUsingPickup = 1 'Send message using the local SMTP service pickup directory. 
Const cdoSendUsingPort = 2 'Send the message using the network (SMTP over the network). 
Const cdoAnonymous = 0 'Do not authenticate
Const cdoBasic = 1 'basic (clear-text) authentication
Const cdoNTLM = 2 'NTLM
'SMTP userinfo

unsubscribeHTML ="<div>This email newsletter is only sent to our students and friends.   If you no longer wish to receive these emails, please click the remove me link.  <a href=""*|UNSUB:http://mydomain.com/unsubscribe/|*"">Click here to unsubscribe.</a></div>"


Set objMessage = CreateObject("CDO.Message") 
objMessage.Subject = theSubject 
objMessage.From = "News <me@mydomain.com>"
objMessage.To = ""&(rsEmailList.Fields.Item("FirstName").Value)&" "&(rsEmailList.Fields.Item("LastName").Value)&" <"&rsEmailList.Fields.Item("Email").Value&">"'Rcpt
objMessage.HTMLBody =  theHtml' runs sub EmailBody

'==This section provides the configuration information for the remote SMTP server.
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 
'Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") =  "smtp.mandrillapp.com" 
'Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
'Your UserID on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusername") = smtpUser
'Your password on the SMTP server
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendpassword") = smtpPass
'Server port (typically 25)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 
'Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = true
'Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60

'==End remote SMTP server configuration section==


Open in new window

It is important to note that I have also set up dkim and spf records.  And that may be something you are missing in AWS.
LVL 53

Expert Comment

by:Scott Fell, EE MVE
ID: 40459592
I also  use this site as my reference http://www.paulsadowski.com/wsh/cdo.htm

Another options is to use the aws api http://docs.aws.amazon.com/ses/latest/APIReference/API_SendEmail.html

You can simply use xmlhttppost to send the data
Date: Thu, 18 Aug 2011 22:25:27 GMT
Host: email.us-east-1.amazonaws.com
Content-Type: application/x-www-form-urlencoded
X-Amzn-Authorization: AWS3 AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE,
 Algorithm=HmacSHA256, SignedHeaders=Date;Host
Content-Length: 230


Open in new window

LVL 53

Expert Comment

by:Scott Fell, EE MVE
ID: 40459608
One last option that I have resorted to is to use an sdk that already exits like php.  Then set up a php page to do the work for you as your own web service where you can post data to via classic asp xmlhttpost.  It can be a lot easier than trying to program the long way in classic asp.

$result = $client->sendEmail(array(
    // Source is required
    'Source' => 'string',
    // Destination is required
    'Destination' => array(
        'ToAddresses' => array('string', ... ),
        'CcAddresses' => array('string', ... ),
        'BccAddresses' => array('string', ... ),
    // Message is required
    'Message' => array(
        // Subject is required
        'Subject' => array(
            // Data is required
            'Data' => 'string',
            'Charset' => 'string',
        // Body is required
        'Body' => array(
            'Text' => array(
                // Data is required
                'Data' => 'string',
                'Charset' => 'string',
            'Html' => array(
                // Data is required
                'Data' => 'string',
                'Charset' => 'string',
    'ReplyToAddresses' => array('string', ... ),
    'ReturnPath' => 'string',

Open in new window


Author Closing Comment

ID: 40489997
Sorry for the delay - accepted this cannot be done natively and switched to mandrill.


Featured Post

Veeam Disaster Recovery in Microsoft Azure

Veeam PN for Microsoft Azure is a FREE solution designed to simplify and automate the setup of a DR site in Microsoft Azure using lightweight software-defined networking. It reduces the complexity of VPN deployments and is designed for businesses of ALL sizes.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Happy holidays! Your Ops team can pack their bags. IT management and IT management tools are dead. Or at least that’s according to a new blog from Tech Target on AWS’s new Managed Services (MS) offering.
Pop culture is prime bait for hackers seeking to infect user’s computers and mobile devices with malicious malware. Hackers know exactly what the latest trends are online and know how to use them to their advantage.
Steps to create a PostgreSQL RDS instance in the Amazon cloud. We will cover some of the default settings and show how to connect to the instance once it is up and running.
Connecting to an Amazon Linux EC2 Instance from Windows Using PuTTY.
Suggested Courses

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question