Solved

Managing incorrect email address in CDO

Posted on 2008-06-20
7
443 Views
Last Modified: 2008-06-24
How do I manage the error produced by CDO (in classic ASP/VBScript) when a receiver email address is incorrect?

Right now if the email address is incorrect and 8004020e is produced. I understand why the problem occurs but I don't know how to handle it. This function is used to send out quite a lot of emails so I want to avoid

The best thing (I think) would be to if CDO could return some kind of indication that the address is incorrect without causing the entire script to fail. However, suggestions are more than welcome.
function(smtp,toEmail,fromEmail,emailHeader,emailBody)

	dim Mailer, cdoConfig

	Set Mailer = Server.CreateObject("CDO.Message")

	set cdoConfig = Server.CreateObject("CDO.Configuration")

	cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

	cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtp

	cdoConfig.Fields.Update

	set Mailer.Configuration = cdoConfig

	Mailer.To = toEmail

	Mailer.From = fromEmail

	Mailer.Subject = emailHeader

	Mailer.TextBody = emailBody

	Mailer.Send

	if err.number>0 then

	   sendemail=false

	else

	   sendemail=true

	end if

	Set Mailer = Nothing

	Set cdoConfig = Nothing

end function

Open in new window

0
Comment
Question by:Alfahane
  • 4
  • 2
7 Comments
 
LVL 10

Accepted Solution

by:
Dxpert earned 200 total points
Comment Utility
You can use ON ERROR RESUME NEXT and return the bad email from your function instead of the True/False.... see code and pseudo code:
function sendemail (smtp,toEmail,fromEmail,emailHeader,emailBody)
 

	dim Mailer, cdoConfig
 
 

	On Error Resume Next

	

	Set Mailer = Server.CreateObject("CDO.Message")

	set cdoConfig = Server.CreateObject("CDO.Configuration")

	cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2

	cdoConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = smtp

	cdoConfig.Fields.Update

	set Mailer.Configuration = cdoConfig

	Mailer.To = toEmail

	Mailer.From = fromEmail

	Mailer.Subject = emailHeader

	Mailer.TextBody = emailBody

	Mailer.Send

	

	if err.number <> 0 then

		sendemail=toEmail

	else

		sendemail=""

	end if

	

	Set Mailer = Nothing

	Set cdoConfig = Nothing

end function
 
 
 

'ON THE CALLING CODE, YOUR LOOP, YOU WOULD DO SOMETHING LIKE THIS:
 

dim BadEmails, BadEmail
 

'loop emails

do while....
 

	'try to send email

	BadEmail = trim(sendemail(mtp,toEmail,fromEmail,emailHeader,emailBody))

	

	'buld a list of bad emails

	if len(BadEmail) > 0 then

		BadEmails = BadEmails & "," & BadEmail

	end if

	
 

loop
 

if len(trim(BadEmails)) > 0 then

	response.write (BadEmails)

end if

Open in new window

0
 
LVL 16

Assisted Solution

by:brad2575
brad2575 earned 50 total points
Comment Utility
if you just want to capture the errors you could put
on error resume next

so if there is an error then the code will not die but continue processing.

then after the Mailer.Send is called you can check (as you are doing) if there is an error.  Then do whatever you want to do for errors (log them or just ignore them).

Then do this:
err.clear

clears out the error code so the next loop (or any other code will not error out if you have error trapping).  
0
 
LVL 10

Expert Comment

by:Dxpert
Comment Utility
Oh yeah.. Err.Clear :-D


if err.number <> 0 then
                sendemail=toEmail
                Err.Clear
else
                sendemail=""
end if
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:Alfahane
Comment Utility
Great! Thanks!! =)
0
 

Author Comment

by:Alfahane
Comment Utility
Just realized:

This means that all errors will be supposed to be a problem with email validity.

I remember there's one error that has to be with the size of the email.

Is there no way that confirm that the error is in fact an email validity issue?

0
 
LVL 10

Expert Comment

by:Dxpert
Comment Utility
I guess if you figure out what the error number is, then you can use that. For instance, if that error number would be 55555555 then you could do something like this:



if err.number <> 0 then
      if err.number <> 55555555 then
            sendemail=toEmail
            Err.Clear
      end if
else
      sendemail=""
end if
0
 
LVL 10

Expert Comment

by:Dxpert
Comment Utility
to figure out what that error is, you can, send a very long email, then use this IF statement instead:


if err.number <> 0 then
      response.write("Error Number: " & err.number & "<br />")
      response.write("Error Description: " & err.description & "<br />")
      response.end
end if
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Well hello again!  Glad to see you've made it this far without giving up.  In this, the fourth installment of my popular series, I'm going to cover functions and subroutines, what they are, and why they are useful.  Just in case you stumbled onto th…
I would like to start this tip/trick by saying Thank You, to all who said that this could not be done, as it forced me to make sure that it could be accomplished. :) To start, I want to make sure everyone understands the importance of utilizing p…
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

772 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

Need Help in Real-Time?

Connect with top rated Experts

13 Experts available now in Live!

Get 1:1 Help Now