I am trying to send an automated message to my gmail address with CDO.
I checked every setting in my email account (e.g., allow access through less secure apps) but still get the error message 530 5.7.0: The server rejected the sender address.
My code for the configs so far is:
With fields
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "myemail#gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mypassword"
.Update
End With
NewMail.Send
I also noticed that the schemas.microsoft.com site does not seem to work. Is there an update? Or is it still up and the mistakes is within my code?
Related
IONOS are not helpful. Especially as all of a sudden, a form stops sending an email.
This article explains and helps very well Sending email from webform using SMTP server
The error I get is the same: The SMTP server requires a secure connection or the client was not authenticated. The server response was: Authentication required
Here's my VB - I took on board the advice here and made the From the same as the authentication but still no luck. Originally it was objMM.From = New MailAddress(txtEmail.Text). I did also read that port 25 could work but this didn't work either. It was originally 587.
Sub btnSendFeedback_Click(sender as Object, e as EventArgs)
'Create an instance of the MailMessage class
Dim objMM as New MailMessage()
'Set the properties - send the email to the person who filled out the
'feedback form.
objMM.To.Add("receiver#receiver.com")
objMM.From = New MailAddress("website#domain.co.uk")
'Send the email in text format
objMM.IsBodyHtml = False
'Set the priority - options are High, Low, and Normal
objMM.Priority = MailPriority.Normal
'Set the subject
objMM.Subject = "Subject"
'Set the body
objMM.Body = " various long boring fields here . . . "
Dim smtp As New SmtpClient()
smtp.Host = "smtp.ionos.com"
smtp.EnableSsl = True
smtp.UseDefaultCredentials = False
smtp.Credentials = New Net.NetworkCredential("website#domain.co.uk", "passwordhere")
smtp.UseDefaultCredentials = True
smtp.Port = 587
'Send method of the SmtpMail class
smtp.Send(objMM)
End Sub
Is there anything else wrong here I wonder? IONOS are sure it is a script problem.
The fine manual for SmtpClient.Credentials says:
Some SMTP servers require that the client be authenticated before the server will send email on its behalf. To use your default network credentials, you can set the UseDefaultCredentials to true instead of setting [smtpClient.Credentials] property. If the UseDefaultCredentials property is set to false, then the value set in the Credentials property will be used for the credentials when connecting to the server. If the UseDefaultCredentials property is set to false and the Credentials property has not been set, then mail is sent to the server anonymously
As a result, I would expect your code to contain only one mention of UseDefaultCredentials, for purposes of setting it to False..
Unless of course, you have these same credentials configured as the default credentials in the CredentialCache.. in which case mentioning them again here is redundant
Running the Excel VBA code below I get the following error:
Run-time error -2147220973
The transport failed to connect to the server
Public Function send_email()
Set cdomsg = CreateObject("CDO.message")
With cdomsg.Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 'NTLM method
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "mymail#gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mypass"
.Update
End With
' build email parts
With cdomsg
.To = "mymail#gmail.com"
.From = "mymail#gmail.com"
.Subject = "the email subject"
.TextBody = "the full message body goes here. you may want to create a variable to hold the text"
.Send
End With
Set cdomsg = Nothing
End Function
Trouble source
A typo caused this mess - smptserverport should be smtpserverport!
Things I tried
On the way to solve this issue, I tried many things. But now I'm not so sure if all were actually needed.
still, someone might gain something from the list:
Enable "Less Secure App"
Open "Display Captcha" before testing connection
Make sure you have a strong password
App Passwords are no longer recommended
2 Step Verification is not a must - but highly recommended!
Few tips:
Port 465 should be in use when sending the password in clear text
Port 587 should be used when sending a secure password.
if you need to have secure password within VBA/VBS, you can use this little trick with PowerShell (source):
Dim myPassword, cmd, shell, executor, securePassword
myPassword = "ABCABCABC....."
cmd = "powershell.exe ConvertTo-SecureString "& myPassword
Set shell = CreateObject("WScript.Shell")
Set executor = shell.Exec(cmd)
executor.StdIn.Close
securePassword = executor.StdOut.ReadAll
Now I am using the bellow code and it works fine.
Don't forget to change your gmail config to allow sending email from other apps.
Sub sendEmail(gmail, password, targetEmail, subject, bodyContent)
Dim Mail As New Message
Dim Config As Configuration: Set Config = Mail.Configuration
Config(cdoSendUsingMethod) = cdoSendUsingPort
Config(cdoSMTPServer) = "smtp.gmail.com"
Config(cdoSMTPServerPort) = 465
Config(cdoSMTPAuthenticate) = cdoBasic
Config(cdoSMTPUseSSL) = True
Config(cdoSendUserName) = gmail
Config(cdoSendPassword) = password
Config.Fields.Update
Mail.To = targetEmail
Mail.from = Config(cdoSendUserName)
Mail.subject = subject
Mail.HTMLBody = bodyContent
Mail.Send
End Sub
I am trying to send email within Excel VBA. Based on my research on Internet, I enabled Microsoft CDO for Windows 2000 Library and composed my VBA codes as below:
Sub SendCDOMail()
Dim objCDOMsg As Object
Set objCDOMsg = CreateObject("CDO.Message")
'CDO Configuration
With objCDOMsg.Configuration.Fields
'
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
'Server port (typically 25, 587)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
'SMTP server IP or Name
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
'Type of authentication, NONE, Basic (Base64 encoded), NTLM
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
'SMTP Account User ID
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "xxx#bbbb.com"
'SMTP Account Password
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "xxxxxxx"
'Use SSL for the connection (False or True)
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
.Update
End With
'CDO Message
objCDOMsg.Subject = "TEST Subject"
objCDOMsg.From = "xx#xx.com"
objCDOMsg.To = "xx#xx.com"
objCDOMsg.TextBody = "TEST Body"
objCDOMsg.Send
End Sub
However, I received the error saying:
The server rejected the sender address. The server response was: 530.5.7.57 SMTP;
Client was not authenticated to send anonymous mail during MAIL FROM
I also tried the same configurations using PowerShell and it worked (smtpserver, username, password, server port...).
I don't know where it might go wrong.
Here it is: https://technet.microsoft.com/en-us/library/mt210446(v=exchg.150).aspx - note that this is in the Office365 section for "How to set up a multifunction device or application to send email using Office 365,", so there may be other things in there for you too.
This indicates that you are connecting to the SMTP client submission endpoint (smtp.office365.com), which can't be used for direct send. For direct send, use the MX endpoint for your Office 365 tenant, which ends with "mail.protection.outlook.com." You can find your MX endpoint by following the steps in Full configuration instructions for direct send.
I am looking for an alternative to using smtp.gmail.com as they have disabled SMTP relay at my work place. And they are adamant they will not make any exceptions.
I have written an extensive application in VB.net which captures a boat load of requirements from the user. At the end there is obviously a button to send all the captured data to some recipients. My code is as follows :
Private Sub btnEmail_Click(sender As Object, e As EventArgs) Handles btnEmail.Click
email.From = New MailAddress("kuldip.mond123#gmail.com", "Kuldip Mond")
email.Subject = "SAP Order Prerequisite Form"
email.Body = "Message Text as Body of email."
email.IsBodyHtml = True
email.To.Add("kmond#mycompany.com")
smtp.EnableSsl = True
smtp.Port = 587
smtp.Host = "smtp.gmail.com"
smtp.UseDefaultCredentials = False
smtp.Credentials = New Net.NetworkCredential("kmond#mycompany.com", "*********")
smtp.Send(email)
MsgBox("Email Sent")
End Sub
I have considered and read up on SMTP Client with gmail Apps script etc but somewhere sometime sooner or later they all boil down to using a smtp.gmail.com
Would appreciate any guidence.
Thanks in advance.
Will an SMTP gateway be available when the application is published? If so, there are a number of local SMTP host solutions for development environments.
I am in the same situation with my IT team myself (no SMTP for dev, but we have access for UAT and Live), and I use the SMTP4Dev (https://smtp4dev.codeplex.com/) application happily.
If you point to the application as your SMTP server, any e-mails sent out using it will be caught by the application and be readable by you.
I found following code but it is not working.
Set cdomsg = CreateObject("CDO.message")
With cdomsg.Configuration.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smptserverport") = 465
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 10
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = MailSender
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = MailPassword
.Item("http://schemas.microsoft.com/cdo/configuration/urlproxyserver") = "xxx.xxx.x.xxx:8080"
.Update
End With
' build email parts
With cdomsg
.To = MailTo
.From = MailSender
.Subject = MailSubject
.TextBody = MailText
.Send
End With
Set cdomsg = Nothing
I get the error
The Transport Failed to connect to the Server
I'm behind a proxy I tried with and without it. The error is the same. What I'm uncertain about is if IIS is required for this to work becasue when googling this error it's often about issues with ASP and IIS. I think the code is fine. It' s identical to code working for others.
Other potential issues?
EDIT:
Is there a tool which allows me to get a for meaningful error message?
EDIT:
Never got this to work. Company changed to gmail as email provider and I did not get it to work either with my private gmail (proxy issues?) or my company email now linked to gmail ("Google Business"). However company has licensed Affixa chrome plugin. With that plugin it is possible do send email or better said affixa will open a dialog in gmail and you will have to press send manually.