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

Problems with sending email via CDO through a remote SMTP server

Posted on 2008-10-05
Last Modified: 2009-09-30
I am using CDO / ASP to send email via a remote server.

In 4 out of 5 accounts it is working. Each account is using a separate mail server and username/password.

The problem account has the correct username, password, and mail server settting. I know this because using Outlook I am able to send an receive messages.

Is there a setting on the mail server of the problem account that may be preventing the proper sending of the emails?

One suggested answer was that the server isn't allowing emails to be relayed from my server: http://bytes.com/forum/thread53504.html  However, since I can send through outlook, doesn't this rule that out?

From here: http://classicasp.aspfaq.com/email/why-does-cdo-message-give-me-8004020f-errors.html

1) I don't think the SMTP server requires authentication since I can send it via Outlook without it
2) A possible error
3) Unlikely
4) Unknown
5) Didn't resolve the issue

Sub TestEmailSettings2(smtp_username,smtp_password,mail_server)
 	On Error Resume Next
	Const cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing"
	Const cdoSendUsingPort = 2
	Const cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver"
	Const cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport"
	Const cdoSMTPConnectionTimeout = "http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout"
	Const cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"
	Const cdoBasic = 1
	Const cdoSendUserName = "http://schemas.microsoft.com/cdo/configuration/sendusername"
	Const cdoSendPassword = "http://schemas.microsoft.com/cdo/configuration/sendpassword"
	Dim objConfig  ' As CDO.Configuration
	Dim objMessage ' As CDO.Message
	Dim Fields     ' As ADODB.Fields
	Set objConfig = Server.CreateObject("CDO.Configuration")
	Set Fields = objConfig.Fields
	With Fields
		.Item(cdoSendUsingMethod)       = cdoSendUsingPort
		.Item(cdoSMTPServer)            = smtp_mail_server
		.Item(cdoSMTPServerPort)        = 25
		.Item(cdoSMTPConnectionTimeout) = 10
		.Item(cdoSMTPAuthenticate)      = cdoBasic
		.Item(cdoSendUserName)          = smtp_username
		.Item(cdoSendPassword)          = smtp_password
	End With
	Set objMessage = Server.CreateObject("CDO.Message")
	Set objMessage.Configuration = objConfig
	With objMessage
        .To = "support@myserversdomain.com"
        .From = smtp_username & "<" & smtp_username & ">"
        .Subject = "Test Message: " & smtp_username
        .TextBody = "This is a test message to see if your email settings were configured properly"
	End With
	Set Fields = Nothing
	Set objMessage = Nothing
	Set objConfig = Nothing
 	If Err.Number <> 0 Then
 		Call ClearSMTPEmailSettings(djidnumber)
 		Call DisplayError("We were able to connect to the mail server. However, there appears to be a setting on your server that is preventing the proper relaying of messages. Please recheck the settings and try again or leave the settings blank.")
 	End If
End Sub

Open in new window

Question by:djlurch
  • 6
  • 4

Author Comment

ID: 22646735
Here is the error: error '8004020f' which occurs on the .Send line
LVL 82

Accepted Solution

hielo earned 500 total points
ID: 22646755
>>.Item(cdoSMTPServer)            = smtp_mail_server
the name of the variable in the function argument is just mail_server NOT smtp_mail_server. So, either change:
Sub TestEmailSettings2(smtp_username,smtp_password,mail_server)

Sub TestEmailSettings2(smtp_username,smtp_password,smpt_mail_server)

OR change:
.Item(cdoSMTPServer)            = smtp_mail_server

.Item(cdoSMTPServer)            = mail_server

Author Comment

ID: 22646768

Excellent catch. I never saw that. Does not resolve the issue. The calling Sub in the main page properly populated the variable on a global scope. The code is fully functional for 4 out of 5 tested accounts.  It is just one account that is causing problems.

Please note that I don't have access to the mail server for the account, only the user/pass/mail location.
Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

LVL 82

Expert Comment

ID: 22646837
>>3) Unlikely
If you send from outlook, to tha "bad address" does it bounce?

Author Comment

ID: 22646851

Re-reading 3 I see that it talks about an invalid email address. The send to and from email addresses are both valid.
LVL 82

Expert Comment

ID: 22646929
>>The send to and from email addresses are both valid.
It's not limited to invalid addresses. The remote inbox may be full OR it may not be accepting emails from the specified email address perhaps because it has been "black listed" as a spammer. The point of 3 is that your script is not telling you the "REAL" reason for the rejection. That's why I am asking if it bounces when you send via outlook. Perhaps you have more details there.

Author Comment

ID: 22744253

No, it doesn't bounce.

I read somewhere about email accounts requiring a POP retrieval before allowing a message to be sent. Any way to check if this is the case?

Author Comment

ID: 22940138

I got an email from the mail administrator. The said "we do not allow relaying". I'm not sure I see the difference between Outlook Pop and send and the ASP CDOSYS/CDONTS component (on the backend).
LVL 82

Expert Comment

ID: 23454816
>>I'm not sure I see the difference between Outlook Pop and send and the ASP CDOSYS/CDONTS component (on the backend).
If Outlook is installed in Joe's PC, then Joe is responsible for all email originating from that account and/or pc(it's traceable). On an ASP script, anybody could use your web page to generate (spam) email but chances are YOU are not the one that would be held responsible for the actual content of said spam.

Author Comment

ID: 23482648
How does the web host know that it is my server and not Outlook?

Featured Post

Announcing the Most Valuable Experts of 2016

MVEs are more concerned with the satisfaction of those they help than with the considerable points they can earn. They are the types of people you feel privileged to call colleagues. Join us in honoring this amazing group of Experts.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Forcing form refresh - classic ASP 7 72
XML Parsing Classic ASP 5 64
VBSCRIPT string remove all characters to the right after extension 4 67
Html Table looping 4 25
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…
I was asked about the differences between classic ASP and ASP.NET, so let me put them down here, for reference: Let's make the introductions... Classic ASP was launched by Microsoft in 1998 and dynamically generate web pages upon user interact…
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

838 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