Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 6 years ago.
Improve this question
Is this possible? I am able to send through localhost, but on godaddy the email doesn't get sent. Has anyone managed to achieve this?
I'm using C#
It appears that GoDaddy blocks the SSL ports required by gmail's smtp access. This means you are out of luck at this point. You could just use GoDaddy's local relay:
relay-hosting.secureserver.net
with no credentials.
http://help.godaddy.com/article/955
I was able to send an email through GoDaddy using these settings in the web.config:
<configuration>
<system.net>
<mailSettings>
<smtp>
<network
host="smtpout.secureserver.net"
userName="emailaccount#yourdomain.com"
password="****" />
<!--
As per #Yoro's comment you might have
luck including the port number as well
-->
</smtp>
</mailSettings>
</system.net>
</configuration>
and this code:
var SmtpClient = new SmtpClient();
SmtpClient.Send("emailaccount#yourdomain.com", "to#whatever.com", "subject", "body");
Note I believe that the from address in the email you are sending has to be from your domain. I tried sending an email as coming form another domain and got an error message.
You have to make sure you have an email account in GoDaddy, you can check by logging in and going to Products > Email > Email Plans. You also have to make sure SMTP relay is turned on, it was turned on by default for me. Also important to know by default my GoDaddy account only allows me to send 250 emails a day.
I am creating a simple contact form using ASP.Net MVC 3 on GoDaddy. I wanted to be able to send the emails to accounts hosted on Google Apps. This question matched my situation, but only this GoDaddy help article really solved my problem. Hope it helps someone else!
Code sample from the article:
// language -- C#
// import namespace
using System.Web.Mail;
private void SendEmail()
{
const string SERVER = "relay-hosting.secureserver.net";
MailMessage oMail = new System.Web.Mail.MailMessage();
oMail.From = "emailaddress#domainname";
oMail.To = "emailaddress#domainname";
oMail.Subject = "Test email subject";
oMail.BodyFormat = MailFormat.Html; // enumeration
oMail.Priority = MailPriority.High; // enumeration
oMail.Body = "Sent at: " + DateTime.Now;
SmtpMail.SmtpServer = SERVER;
SmtpMail.Send(oMail);
oMail = null; // free up resources
}
This seems to be a common issue.
There are two things required.
Add a user that will be used for authentication. You can't send anonymously via GoDaddy
Follow the configuration specified here.
This should make it work correctly.
For people who still looking for an answer try this
smtp.Host = "relay-hosting.secure.net";
smtp.EnableSsl = false;
smtp.UseDefaultCredentials = false;
smtp.Port = 25;
When using relay-hosting with Godaddy the email objects FROM email address MUST be a Godaddy "white Listed" email.
They do this to stop spammers hijacking an account
There is an alternative for using the relay-host
Using the GoDaddy form-mailer, (Google Serach: "_gdForm/webformmailer.asp")
This alternative can be used to send a pre-designated "form-mailer" email account all the web forms and it does work! but does require some hosting.content.form-mailer setup on GoDaddy.
check out how I've used the form-mailer:
(only catch is, it takes away the ability to code a subscribe/unsubscribe XML database, as the form data is sent off to this inaccessable ASP file) So I may end up revert back to using relay hosting in ASP.NET
www.earthed.net.au\News.aspx
www.earthed.net.au\Contact.aspx
www.earthed.net.au\Support.aspx
My ultimate goal was to have an email come into my inbox from joe#blogs.com with the necessry form field data, but no matter how you go your Host provider's security setting will ultimately determine your ability to do this.
Also tried using google and hotmail smtp hosts (as I have an account with each) and same secirty restriction story, maybe a lesser known free web email provider that has lower security settings allowing full relay hosting (if so let me know)
The last time I tried doing this (maybe early 2011-ish) I was not able to programmatically send out from Gmail account on GoDaddy. I took code the exact same code that worked on a different hosting company's server and it failed on GoDaddy's server so I'm quite confident that the code was not the issue.
I called their tech support and got conflicting information but I had heard enough to convince myself sending via Gmail was not a for sure supported service on GoDaddy's servers.
I was also given the workaround option of using their web email form which is totally not what the project I was working on could use and underscored the notion that GoDaddy did not fully understand what they talking about.
In the end I found that I was able to just use GoDaddy's SMTP servers and plug in my own "from" address which allowed me to send mail to any email address and to spoof the origination email address. So they end up locking down legitimate email functionality and instead force you to use a highly abusable system instead.
Again, this was a while ago that I ran into this issue but it would be easy enough to check to see if they still allow you to use their SMTP server to send emails.
I think your best option is to find another host. When I was coding for a site on godaddy I remember asking godaddy whether they disabled their mapi functions and it turns out they do a little more than just disable it. I've heard they filter specific outgoing ports.
Almost forgot here are googles detailed instructions. The above tool will change automatically 8-)
http://www.google.com/support/a/bin/answer.py?hl=en&answer=33353
This Code works
// Create the msg object to be sent
MailMessage msg = new MailMessage();
// Add your email address to the recipients
msg.To.Add("mr#soundout.net");
// Configure the address we are sending the mail from
MailAddress address = new MailAddress("mr#soundout.net");
msg.From = address;
msg.Subject = txtSubject.Text;
msg.Body = txtName.Text + "n" + txtEmail.Text + "n" + txtMessage.Text;
SmtpClient client = new SmtpClient();
client.Host = "relay-hosting.secureserver.net";
client.Port = 25;
// Send the msg
client.Send(msg);
After experiencing the same issue you are describing in your question, I finally figure out a solution.
Check your web.config file and make sure that the debug property is set to false whenever you publish your website. Let me know if this works. It did for me.
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<customErrors mode="Off"/>
</system.web>
</configuration>
I am trying something similar, just got reset emails and register emails, had to change the $header to noreply#zzz.com to match the website address. Didn't need SMTP, just takes forever to receive the email....still a work in progress.
$subject = "Please reset your password";
$message = " Here is your password reset code {$validation_code}
Click here to reset your password http://www.zzz.com/Login_App/code.php?email=$email&code=$validation_code
";
$headers = "From: noreply#zzz.com";
Related
For some reason neither the accepted answer nor any others work for me for "Sending email in .NET through Gmail". Why would they not work?
UPDATE: I have tried all the answers (accepted and otherwise) in the other question, but none of them work.
I would just like to know if it works for anyone else, otherwise Google may have changed something (which has happened before).
When I try the piece of code that uses SmtpDeliveryMethod.Network, I quickly receive an SmtpException on Send(message). The message is
The SMTP server requires a secure connection or the client was not authenticated.
The server response was:
5.5.1 Authentication Required. Learn more at" <-- seriously, it ends there.
UPDATE:
This is a question that I asked a long time ago, and the accepted answer is code that I've used many, many times on different projects.
I've taken some of the ideas in this post and other EmailSender projects to create an EmailSender project at Codeplex. It's designed for testability and supports my favourite SMTP services such as GoDaddy and Gmail.
CVertex, make sure to review your code, and, if that doesn't reveal anything, post it. I was just enabling this on a test ASP.NET site I was working on, and it works.
Actually, at some point I had an issue on my code. I didn't spot it until I had a simpler version on a console program and saw it was working (no change on the Gmail side as you were worried about). The below code works just like the samples you referred to:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("myusername#gmail.com", "mypwd"),
EnableSsl = true
};
client.Send("myusername#gmail.com", "myusername#gmail.com", "test", "testbody");
Console.WriteLine("Sent");
Console.ReadLine();
}
}
}
I also got it working using a combination of web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx and code (because there is no matching EnableSsl in the configuration file :( ).
2021 Update
By default you will also need to enable access for "less secure apps" in your gmail settings page: google.com/settings/security/lesssecureapps. This is necessary if you are getting the exception "`The server response was: 5.5.1 Authentication Required. – thanks to #Ravendarksky
In addition to the other troubleshooting steps above, I would also like to add that if you have enabled two-factor authentication (also known as two-step verification) on your GMail account, you must generate an application-specific password and use that newly generated password to authenticate via SMTP.
To create one, visit: https://www.google.com/settings/ and choose Authorizing applications & sites to generate the password.
THE FOLLOWING WILL ALMOST CERTAINLY BE THE ANSWER TO YOUR QUESTION IF ALL ELSE HAS FAILED:
I got the exact same error, it turns out Google's new password strength measuring algorithm has changed deeming my current password as too weak, and not telling me a thing about it (not even a message or warning)... How did I discover this? Well, I chose to change my password to see if it would help (tried everything else to no avail) and when I changed my password, it worked!
Then, for an experiment, I tried changing my password back to my previous password to see what would happen, and Gmail didn't actually allow me to do this, citing the reason "sorry we cannot allow you to save this change as your chosen password is too weak" and wouldn't let me go back to my old password. I figured from this that it was erroring out because either a) you need to change your password once every x amount of months or b). As I said before, their password strength algorithms changed and therefore the weak password I had was not accepted, even though they did not say anything about this when trying to login ANYWHERE! This (number 2) is the most likely scenario, as my weak password was about 4 months old, and it let me use it in Gmail.
It's pretty bad that they said nothing about this, but it makes sense. Because most hijacked emails are logged into using software outside of gmail, and I'm guessing you are required to have a stronger password if you want to use Gmail outside of the Gmail environment.
Turn On Access For Less Secure Apps and it will work for all no need
to change password.
Link to Gmail Setting
I've had some problems sending emails from my gmail account too, which were due to several of the aforementioned situations.
Here's a summary of how I got it working, and keeping it flexible at the same time:
First of all setup your GMail account:
Enable IMAP and assert the right maximum number of messages (you can do so here)
Make sure your password is at least 7 characters and is strong (according to Google)
Make sure you don't have to enter a captcha code first. You can do so by sending a test email from your browser.
Make changes in web.config (or app.config, I haven't tried that yet but I assume it's just as easy to make it work in a windows application):
<configuration>
<appSettings>
<add key="EnableSSLOnMail" value="True"/>
</appSettings>
<!-- other settings -->
...
<!-- system.net settings -->
<system.net>
<mailSettings>
<smtp from="yourusername#gmail.com" deliveryMethod="Network">
<network
defaultCredentials="false"
host="smtp.gmail.com"
port="587"
password="stR0ngPassW0rd"
userName="yourusername#gmail.com"
/>
<!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
</smtp>
</mailSettings>
</system.net>
</configuration>
Add a Class to your project:
Imports System.Net.Mail
Public Class SSLMail
Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)
GetSmtpClient.Send(e.Message)
'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
e.Cancel = True
End Sub
Public Shared Sub SendMail(ByVal Msg As MailMessage)
GetSmtpClient.Send(Msg)
End Sub
Public Shared Function GetSmtpClient() As SmtpClient
Dim smtp As New Net.Mail.SmtpClient
'Read EnableSSL setting from web.config
smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
Return smtp
End Function
End Class
And now whenever you want to send emails all you need to do is call SSLMail.SendMail:
e.g. in a Page with a PasswordRecovery control:
Partial Class RecoverPassword
Inherits System.Web.UI.Page
Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
e.Message.Bcc.Add("webmaster#example.com")
SSLMail.SendMail(e)
End Sub
End Class
Or anywhere in your code you can call:
SSLMail.SendMail(New system.Net.Mail.MailMessage("from#from.com","to#to.com", "Subject", "Body"})
I hope this helps anyone who runs into this post! (I used VB.NET but I think it's trivial to convert it to any .NET language.)
Oh...It's amazing...
First I Couldn't send an email for any reasons.
But after I changed the sequence of these two lines as below, it works perfectly.
//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username#gmail.com", "password");
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername#gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername#gmail.com","yourusername#gmail.com","test","testbody")
If you get an error like "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at" as I get before this, make sure the line SMTPClientObj.UseDefaultCredentials = False included and this line should before the SMTPClientObj.Credentials.
I did try to switch these 2 lines the opposite way and the 5.5.1 Authentication Required error returned.
The problem is not one of technical ability to send through gmail. That works for most situations. If you can't get a machine to send, it is usually due to the machine not having been authenticated with a human at the controls at least once.
The problem that most users face is that Google decides to change the outbound limits all the time. You should always add defensive code to your solution. If you start seeing errors, step off your send speed and just stop sending for a while. If you keep trying to send Google will sometimes add extra time to your delay period before you can send again.
What I have done in my current system is to send with a 1.5 second delay between each message. Then if I get any errors, stop for 5 minutes and then start again. This usually works and will allow you to send up to the limits of the account (last I checked it was 2,000 for premier customer logins per day).
I had the same problem, but it turned out to be my virus protection was blocking outgoing "spam" email. Turning this off allowed me to use port 587 to send SMTP email via GMail
Simple steps to fix this:
1)Sign in to your Gmail
2)Navigate to this page https://www.google.com/settings/security/lesssecureapps & set to "Turn On"
If nothing else has worked here for you you may need to allow access to your gmail account from third party applications. This was my problem. To allow access do the following:
Sign in to your gmail account.
Visit this page https://accounts.google.com/DisplayUnlockCaptcha and click on button to allow access.
Visit this page https://www.google.com/settings/security/lesssecureapps and enable access for less secure apps.
This worked for me hope it works for someone else!
I'm not sure which .NET version is required for this because eglasius mentioned there is no matching enableSsl setting (I'm using .NET 4.0, but I suspect it to work in .NET 2.0 or later), but this configuration justed worked for me (and doesn't require you to use any programmatic configuration):
<system.net>
<mailSettings>
<smtp from="myusername#gmail.com" deliveryMethod="Network">
<network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername#gmail.com"/>
</smtp>
</mailSettings>
</system.net>
You might have to enable POP or IMAP on your Gmail account first:
https://mail.google.com/mail/?shva=1#settings/fwdandpop
I recommend trying it with a normal mail client first...
I was using corporate VPN connection. It was the reason why I couldn't send email from my application. It works if I disconnect from VPN.
I also found that the account I used to log in was de-activated by google for some reason. Once I reset my password (to the same as it used to be), then I was able to send emails just fine. I was getting 5.5.1 message also.
I had also try to many solution but make some changes it will work
host = smtp.gmail.com
port = 587
username = email#gmail.com
password = password
enabledssl = true
with smtpclient above parameters are work in gmail
#Andres Pompiglio: Yes that's right you must change your password at least once..
this codes works just fine:
//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
string subject, string body)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(from);
message.From = fromAddress;
message.To.Add(toList);
if (ccList != null && ccList != string.Empty)
message.CC.Add(ccList);
message.Subject = subject;
message.IsBodyHtml = true;
message.Body = body;
// We use gmail as our smtp client
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = new System.Net.NetworkCredential(
"Your Gmail User Name", "Your Gmail Password");
smtpClient.Send(message);
msg = "Successful<BR>";
}
catch (Exception ex)
{
msg = ex.Message;
}
return msg;
}
//End Send Email Function
AND you can make a call to the function by using:
Response.Write(SendMail(recipient Address, "UserName#gmail.com", "ccList if any", "subject", "body"))
I was getting the same error and none of the above solutions helped.
My problem was that I was running the code from a remote server, which had never been used to log into the gmail account.
I opened a browser on the remote server and logged into gmail from there. It asked a security question to verify it was me since this was a new location. After doing the security check I was able to authenticate through code.
Turn on less secure apps for your account: https://www.google.com/settings/security/lesssecureapps
First check your gmail account setting & turn On from "Access for less secure apps"
We strongly recommend that you use a secure app, like Gmail, to access your account. All apps made by Google meet these security standards. Using a less secure app, on the other hand, could leave your account vulnerable. Learn more.
Set
smtp.UseDefaultCredentials = false;
before
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
I ran into this same error ( "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at" ) and found out that I was using the wrong password. I fixed the login credentials, and it sent correctly.
I know this is late, but maybe this will help someone else.
Another thing that I've found is that you must change your password at least once.
And try to use a secure level password (do not use the same user as password, 123456, etc.)
Yet another possible solution for you. I was having similar problems connecting to gmail via IMAP. After trying all the solutions that I came across that you will read about here and elsewhere on SO (eg. enable IMAP, enable less secure access to your mail, using https://accounts.google.com/b/0/displayunlockcaptcha and so on), I actually set up a new gmail account once more.
In my original test, the first gmail account I had created, I had connected to my main gmail account. This resulted in erratic behaviour where the wrong account was being referenced by google. For example, running https://accounts.google.com/b/0/displayunlockcaptcha opened up my main account rather than the one I had created for the purpose.
So when I created a new account and did not connect it to my main account, after following all the appropriate steps as above, I found that it worked fine!
I haven't yet confirmed this (ie. reproduced), but it apparently did it for me...hope it helps.
One or more reasons are there for these error.
Log in with your Gmail( or any other if ) in your local system.
Also check for Less Secure App and Set it to "Turn On" here is the Link for GMAIL.
https://www.google.com/settings/security/lesssecureapps
check for EnableSsl in your Email code, and also set it to true.
smtp.EnableSsl = true;
Also check which port are you using currently. 25 is Global, but you can check it for others too like 587.
check here. Does all SMTP communication happen over 25?
IF YOU ARE ON REMOTE : Check the answer of Vlad Tamas above.
If you have 2-Step Verification step up on your Gmail account, you will need to generate an App password.
https://support.google.com/accounts/answer/185833?p=app_passwords_sa&hl=en&visit_id=636903322072234863-1319515789&rd=1
Select How to generate an App password option and follow the steps provided. Copy and paste the generated App password somewhere as you will not be able to recover it after you click DONE.
You can also connect via port 465, but due to some limitations of the System.Net.Mail namespace you may have to alter your code. This is because the namespace does not offer the ability to make implicit SSL connections. This is discussed at http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx, and I have supplied an example of how to use the CDO (Collaborative Data Object) in another discussion (GMail SMTP via C# .Net errors on all ports).
I had this problem resolved. Aparently that message is used in multiple error types.
My problem was that i had reached my maximum of 500 sent mails.
log into the account and manually try to send a mail. If the limit has been reached it will inform you
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;
Google no longer allows "less secure apps", so this is not possible for normal Gmail users.
Changes by Google after May 2022.
For these changes, we have to do the following changes to our code.
First go to Gmail account security.
Enable two-factor authentication.
Configure the App password in the google account.
Use the App password in the application.
MailMessage mail = new MailMessage();
mail.To.Add(email.Text.ToString().Trim());
mail.From = new MailAddress("your_Gmail_address");
mail.Subject = "Hello test email";
mail.Body = "<p>hello user<br/> How are you?</p>";
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Port = 587; // 25 465
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Host = "smtp.gmail.com";
smtp.Credentials = new System.Net.NetworkCredential("your_Gmail_address", "Your_gmail_app_password");
smtp.Send(mail);
Change your gmail password and try again, it should work after that.
Don't know why, but every time you change your hosting you have to change your password.
This code works for me, and also allows in gmail access from unsecure apps, and removing authentication in 2 steps:
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(MailAddress, Password)
I am developing a web application for my company. Part of it requires the internal user to fill out a form, and send an email on this user's behalf. It is all within the company. I searched and found two possible routes old system.net.mail and a more recent microsoft.exchange.webservices, but seems our exchange server requires credentials. I can only get the user's login and his email address login+"#company.com". How can i get this done?
Below are the codes i used smtp (system.net.mail), but it doesnt work.
string[] username =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\');
string email = username[1] + "#company.com";
MailAddress from = new MailAddress(email);
MailAddress to = new MailAddress("someone#company.com");
MailMessage message = new MailMessage(from, to);
message.Subject = "testmail";
message.Body = "<h>testmail</h>";
message.IsBodyHtml = true;
SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Send(message);
SmtpClient requires that you either specify the SMTP server directly, or that you have the right application/machine configuration settings for it to detect the server automatically. Your code is choosing the second option implicitly, and I suspect you don't have the right settings in app/machine config. Exchange does NOT support SMTP in its default configuration, afaik, so unless someone familiar with your Exchange server knows SMTP is configured and can give you the right address, SmtpClient is probably out.
Exchange Web Services (aka EWS) is probably your better answer, but it's not really a good one. In order to use exchange web services, you will need one of:
1) The domain, username, and password of the user so that you can pass the right NetworkCredential to EWS. In your case, this would probably mean the user has to enter their password into your form, which may break your requirements.
2) The user that the process is running as (in a web application, the application pool identity for IIS) has to have permissions to send mail as the user in question.
3) If you can use ASP.NET authentication to impersonate the user (this would only be a good approach in a LAN application), then you can effectively fall back to option (2), because now you will be talking to EWS as the user, who obviously will have permission to send mail from their own address.
As you can see, the right approach depends greatly on your Exchange/Active Directory/LAN setup.
I want to send email via my desktop app
Here is my code
MailMessage m = new MailMessage("mahmoud#isysway.com", "gavoh3d#yahoo.com", "subject", "body");
m.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("out.tedata.net.eg");
smtp.Credentials = new System.Net.NetworkCredential("mahmoud#isysway.com", "password");
smtp.UseDefaultCredentials = true;
smtp.Send(m);
My problem is: this code throw an exception
Transaction failed. The server response was: 5.7.1 <gavoh3d#yahoo.com>: Relay access denied
I think because my internet provider need outgoing server (SMTP) authentication
I config it in Outlook as below
Now, How can I config it in my code
Thanks
I found this question because I have the same problem. I solved it using the myNetworks entry in /etc/postfix/main.cf
Add the IP from which your sending to the myNetworks line, I think PostFix expects a space to separate IP adresses, for my eyes it's better to use a comma, but if I use both it works.
This solution is not ideal, so I'll be gratefull for a better one!
Rob
It can be various issues:
are you able to send mail to Yahoo mail from your outlook? check this link If yes
Check IIS SMTP Virtual Server Relay Restrictions
Hope this help you.
I am trying to send mail through my Google Apps email account. This is setup on my own domain and is all working fine through the web interface and through outlook.
However, i'm trying to send an email from a webpage using C#, I get no exceptions and everything appears to go smoothly, but the emails never seem to arrive:
MailMessage msg = new MailMessage("no-reply#xxxx.co.uk", "dan#xxxx.co.uk");
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential("no-reply#xxxx.co.uk", "xxxxxxxxx");
smtp.EnableSsl = true;
msg.IsBodyHtml = true;
msg.Body = body;
smtp.Send(msg);
The body is a string which i've generated earlier in the code. As far as i'm aware, if there was a problem with actually connecting to the SMTP server at Gmail then I would get an exception thrown.
Any ideas what could cause this not to work? Only thing different I can see compared to other peoples examples is that I have set body as HTML and i'm sending from a Google Apps account rather than an #gmail.com account.
The google apps itself is all configured fully and working, i've set this up numerous times so I know it's not likely to be a problem there.
I also tried sending on port 25, as that's what you use when configuring Outlook to send from a Gmail account.
Same result for both, no exception thrown, but email never arrives. Both emails the sender and receiver are on my domain using Google Apps for Gmail.
EDIT:
Also I should mention that I have signed in using both accounts, and both have IMAP and POP enabled in their settings etc.
New findings
This is a strange one
If I send mail manually from:
no-reply#mydomain.com to dan#mydomain.com - Then it works
But if I send it through code this way...it doesn't work...
If I send the following through code it does work:
no-reply#mydomain.com to me#gmail.com or me#ntlworld.com - This works through code!
I would then be led to think that this means a problem with dan#mydomain.com receiving messages...But it receives any messages sent manually from any google, hotmail, or ntlworld email address i've tried.
So either Google Apps accounts can't receive email sent through code (unlikely) or something else is at play here
The server may silently discard your message if there is a problem with it.
- Despite any spec saying otherwise.
The message might be lost in the ether despite being "delivered".
The SMTP server may be applying severe filtering and might additionally require that your sender and destination email addresses match up 'correctly'
I suggest trying with a different SMTP host just to check. :)
When you setup Google Apps, even if the MX records are all working correctly for sending mail manually to/from other accounts, there can still be problems.
The answer is to wait 12-24 hours after setting up your MX Records, even if everything else is working fine.
If you receive no exception, then to me this is the only answer at the moment.
All is working correctly now. Even though all MX records were correct on my DNS and email appeared to be working, there were still changes going on in the background
For some reason neither the accepted answer nor any others work for me for "Sending email in .NET through Gmail". Why would they not work?
UPDATE: I have tried all the answers (accepted and otherwise) in the other question, but none of them work.
I would just like to know if it works for anyone else, otherwise Google may have changed something (which has happened before).
When I try the piece of code that uses SmtpDeliveryMethod.Network, I quickly receive an SmtpException on Send(message). The message is
The SMTP server requires a secure connection or the client was not authenticated.
The server response was:
5.5.1 Authentication Required. Learn more at" <-- seriously, it ends there.
UPDATE:
This is a question that I asked a long time ago, and the accepted answer is code that I've used many, many times on different projects.
I've taken some of the ideas in this post and other EmailSender projects to create an EmailSender project at Codeplex. It's designed for testability and supports my favourite SMTP services such as GoDaddy and Gmail.
CVertex, make sure to review your code, and, if that doesn't reveal anything, post it. I was just enabling this on a test ASP.NET site I was working on, and it works.
Actually, at some point I had an issue on my code. I didn't spot it until I had a simpler version on a console program and saw it was working (no change on the Gmail side as you were worried about). The below code works just like the samples you referred to:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Net;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("myusername#gmail.com", "mypwd"),
EnableSsl = true
};
client.Send("myusername#gmail.com", "myusername#gmail.com", "test", "testbody");
Console.WriteLine("Sent");
Console.ReadLine();
}
}
}
I also got it working using a combination of web.config, http://msdn.microsoft.com/en-us/library/w355a94k.aspx and code (because there is no matching EnableSsl in the configuration file :( ).
2021 Update
By default you will also need to enable access for "less secure apps" in your gmail settings page: google.com/settings/security/lesssecureapps. This is necessary if you are getting the exception "`The server response was: 5.5.1 Authentication Required. – thanks to #Ravendarksky
In addition to the other troubleshooting steps above, I would also like to add that if you have enabled two-factor authentication (also known as two-step verification) on your GMail account, you must generate an application-specific password and use that newly generated password to authenticate via SMTP.
To create one, visit: https://www.google.com/settings/ and choose Authorizing applications & sites to generate the password.
THE FOLLOWING WILL ALMOST CERTAINLY BE THE ANSWER TO YOUR QUESTION IF ALL ELSE HAS FAILED:
I got the exact same error, it turns out Google's new password strength measuring algorithm has changed deeming my current password as too weak, and not telling me a thing about it (not even a message or warning)... How did I discover this? Well, I chose to change my password to see if it would help (tried everything else to no avail) and when I changed my password, it worked!
Then, for an experiment, I tried changing my password back to my previous password to see what would happen, and Gmail didn't actually allow me to do this, citing the reason "sorry we cannot allow you to save this change as your chosen password is too weak" and wouldn't let me go back to my old password. I figured from this that it was erroring out because either a) you need to change your password once every x amount of months or b). As I said before, their password strength algorithms changed and therefore the weak password I had was not accepted, even though they did not say anything about this when trying to login ANYWHERE! This (number 2) is the most likely scenario, as my weak password was about 4 months old, and it let me use it in Gmail.
It's pretty bad that they said nothing about this, but it makes sense. Because most hijacked emails are logged into using software outside of gmail, and I'm guessing you are required to have a stronger password if you want to use Gmail outside of the Gmail environment.
Turn On Access For Less Secure Apps and it will work for all no need
to change password.
Link to Gmail Setting
I've had some problems sending emails from my gmail account too, which were due to several of the aforementioned situations.
Here's a summary of how I got it working, and keeping it flexible at the same time:
First of all setup your GMail account:
Enable IMAP and assert the right maximum number of messages (you can do so here)
Make sure your password is at least 7 characters and is strong (according to Google)
Make sure you don't have to enter a captcha code first. You can do so by sending a test email from your browser.
Make changes in web.config (or app.config, I haven't tried that yet but I assume it's just as easy to make it work in a windows application):
<configuration>
<appSettings>
<add key="EnableSSLOnMail" value="True"/>
</appSettings>
<!-- other settings -->
...
<!-- system.net settings -->
<system.net>
<mailSettings>
<smtp from="yourusername#gmail.com" deliveryMethod="Network">
<network
defaultCredentials="false"
host="smtp.gmail.com"
port="587"
password="stR0ngPassW0rd"
userName="yourusername#gmail.com"
/>
<!-- When using .Net 4.0 (or later) add attribute: enableSsl="true" and you're all set-->
</smtp>
</mailSettings>
</system.net>
</configuration>
Add a Class to your project:
Imports System.Net.Mail
Public Class SSLMail
Public Shared Sub SendMail(ByVal e As System.Web.UI.WebControls.MailMessageEventArgs)
GetSmtpClient.Send(e.Message)
'Since the message is sent here, set cancel=true so the original SmtpClient will not try to send the message too:
e.Cancel = True
End Sub
Public Shared Sub SendMail(ByVal Msg As MailMessage)
GetSmtpClient.Send(Msg)
End Sub
Public Shared Function GetSmtpClient() As SmtpClient
Dim smtp As New Net.Mail.SmtpClient
'Read EnableSSL setting from web.config
smtp.EnableSsl = CBool(ConfigurationManager.AppSettings("EnableSSLOnMail"))
Return smtp
End Function
End Class
And now whenever you want to send emails all you need to do is call SSLMail.SendMail:
e.g. in a Page with a PasswordRecovery control:
Partial Class RecoverPassword
Inherits System.Web.UI.Page
Protected Sub RecoverPwd_SendingMail(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.MailMessageEventArgs) Handles RecoverPwd.SendingMail
e.Message.Bcc.Add("webmaster#example.com")
SSLMail.SendMail(e)
End Sub
End Class
Or anywhere in your code you can call:
SSLMail.SendMail(New system.Net.Mail.MailMessage("from#from.com","to#to.com", "Subject", "Body"})
I hope this helps anyone who runs into this post! (I used VB.NET but I think it's trivial to convert it to any .NET language.)
Oh...It's amazing...
First I Couldn't send an email for any reasons.
But after I changed the sequence of these two lines as below, it works perfectly.
//(1)
client.UseDefaultCredentials = true;
//(2)
client.Credentials = new System.Net.NetworkCredential("username#gmail.com", "password");
Dim SMTPClientObj As New Net.Mail.SmtpClient
SMTPClientObj.UseDefaultCredentials = False
SMTPClientObj.Credentials = New System.Net.NetworkCredential("myusername#gmail.com", "mypwd")
SMTPClientObj.Host = "smtp.gmail.com"
SMTPClientObj.Port = 587
SMTPClientObj.EnableSsl = True
SMTPClientObj.Send("myusername#gmail.com","yourusername#gmail.com","test","testbody")
If you get an error like "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at" as I get before this, make sure the line SMTPClientObj.UseDefaultCredentials = False included and this line should before the SMTPClientObj.Credentials.
I did try to switch these 2 lines the opposite way and the 5.5.1 Authentication Required error returned.
The problem is not one of technical ability to send through gmail. That works for most situations. If you can't get a machine to send, it is usually due to the machine not having been authenticated with a human at the controls at least once.
The problem that most users face is that Google decides to change the outbound limits all the time. You should always add defensive code to your solution. If you start seeing errors, step off your send speed and just stop sending for a while. If you keep trying to send Google will sometimes add extra time to your delay period before you can send again.
What I have done in my current system is to send with a 1.5 second delay between each message. Then if I get any errors, stop for 5 minutes and then start again. This usually works and will allow you to send up to the limits of the account (last I checked it was 2,000 for premier customer logins per day).
I had the same problem, but it turned out to be my virus protection was blocking outgoing "spam" email. Turning this off allowed me to use port 587 to send SMTP email via GMail
Simple steps to fix this:
1)Sign in to your Gmail
2)Navigate to this page https://www.google.com/settings/security/lesssecureapps & set to "Turn On"
If nothing else has worked here for you you may need to allow access to your gmail account from third party applications. This was my problem. To allow access do the following:
Sign in to your gmail account.
Visit this page https://accounts.google.com/DisplayUnlockCaptcha and click on button to allow access.
Visit this page https://www.google.com/settings/security/lesssecureapps and enable access for less secure apps.
This worked for me hope it works for someone else!
I'm not sure which .NET version is required for this because eglasius mentioned there is no matching enableSsl setting (I'm using .NET 4.0, but I suspect it to work in .NET 2.0 or later), but this configuration justed worked for me (and doesn't require you to use any programmatic configuration):
<system.net>
<mailSettings>
<smtp from="myusername#gmail.com" deliveryMethod="Network">
<network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587" password="password" userName="myusername#gmail.com"/>
</smtp>
</mailSettings>
</system.net>
You might have to enable POP or IMAP on your Gmail account first:
https://mail.google.com/mail/?shva=1#settings/fwdandpop
I recommend trying it with a normal mail client first...
I was using corporate VPN connection. It was the reason why I couldn't send email from my application. It works if I disconnect from VPN.
I also found that the account I used to log in was de-activated by google for some reason. Once I reset my password (to the same as it used to be), then I was able to send emails just fine. I was getting 5.5.1 message also.
I had also try to many solution but make some changes it will work
host = smtp.gmail.com
port = 587
username = email#gmail.com
password = password
enabledssl = true
with smtpclient above parameters are work in gmail
#Andres Pompiglio: Yes that's right you must change your password at least once..
this codes works just fine:
//Satrt Send Email Function
public string SendMail(string toList, string from, string ccList,
string subject, string body)
{
MailMessage message = new MailMessage();
SmtpClient smtpClient = new SmtpClient();
string msg = string.Empty;
try
{
MailAddress fromAddress = new MailAddress(from);
message.From = fromAddress;
message.To.Add(toList);
if (ccList != null && ccList != string.Empty)
message.CC.Add(ccList);
message.Subject = subject;
message.IsBodyHtml = true;
message.Body = body;
// We use gmail as our smtp client
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = new System.Net.NetworkCredential(
"Your Gmail User Name", "Your Gmail Password");
smtpClient.Send(message);
msg = "Successful<BR>";
}
catch (Exception ex)
{
msg = ex.Message;
}
return msg;
}
//End Send Email Function
AND you can make a call to the function by using:
Response.Write(SendMail(recipient Address, "UserName#gmail.com", "ccList if any", "subject", "body"))
I was getting the same error and none of the above solutions helped.
My problem was that I was running the code from a remote server, which had never been used to log into the gmail account.
I opened a browser on the remote server and logged into gmail from there. It asked a security question to verify it was me since this was a new location. After doing the security check I was able to authenticate through code.
Turn on less secure apps for your account: https://www.google.com/settings/security/lesssecureapps
First check your gmail account setting & turn On from "Access for less secure apps"
We strongly recommend that you use a secure app, like Gmail, to access your account. All apps made by Google meet these security standards. Using a less secure app, on the other hand, could leave your account vulnerable. Learn more.
Set
smtp.UseDefaultCredentials = false;
before
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
I ran into this same error ( "The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.5.1 Authentication Required. Learn more at" ) and found out that I was using the wrong password. I fixed the login credentials, and it sent correctly.
I know this is late, but maybe this will help someone else.
Another thing that I've found is that you must change your password at least once.
And try to use a secure level password (do not use the same user as password, 123456, etc.)
Yet another possible solution for you. I was having similar problems connecting to gmail via IMAP. After trying all the solutions that I came across that you will read about here and elsewhere on SO (eg. enable IMAP, enable less secure access to your mail, using https://accounts.google.com/b/0/displayunlockcaptcha and so on), I actually set up a new gmail account once more.
In my original test, the first gmail account I had created, I had connected to my main gmail account. This resulted in erratic behaviour where the wrong account was being referenced by google. For example, running https://accounts.google.com/b/0/displayunlockcaptcha opened up my main account rather than the one I had created for the purpose.
So when I created a new account and did not connect it to my main account, after following all the appropriate steps as above, I found that it worked fine!
I haven't yet confirmed this (ie. reproduced), but it apparently did it for me...hope it helps.
One or more reasons are there for these error.
Log in with your Gmail( or any other if ) in your local system.
Also check for Less Secure App and Set it to "Turn On" here is the Link for GMAIL.
https://www.google.com/settings/security/lesssecureapps
check for EnableSsl in your Email code, and also set it to true.
smtp.EnableSsl = true;
Also check which port are you using currently. 25 is Global, but you can check it for others too like 587.
check here. Does all SMTP communication happen over 25?
IF YOU ARE ON REMOTE : Check the answer of Vlad Tamas above.
If you have 2-Step Verification step up on your Gmail account, you will need to generate an App password.
https://support.google.com/accounts/answer/185833?p=app_passwords_sa&hl=en&visit_id=636903322072234863-1319515789&rd=1
Select How to generate an App password option and follow the steps provided. Copy and paste the generated App password somewhere as you will not be able to recover it after you click DONE.
You can also connect via port 465, but due to some limitations of the System.Net.Mail namespace you may have to alter your code. This is because the namespace does not offer the ability to make implicit SSL connections. This is discussed at http://blogs.msdn.com/b/webdav_101/archive/2008/06/02/system-net-mail-with-ssl-to-authenticate-against-port-465.aspx, and I have supplied an example of how to use the CDO (Collaborative Data Object) in another discussion (GMail SMTP via C# .Net errors on all ports).
I had this problem resolved. Aparently that message is used in multiple error types.
My problem was that i had reached my maximum of 500 sent mails.
log into the account and manually try to send a mail. If the limit has been reached it will inform you
smtp.Host = "smtp.gmail.com"; //host name
smtp.Port = 587; //port number
smtp.EnableSsl = true; //whether your smtp server requires SSL
smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
smtp.Timeout = 20000;
Google no longer allows "less secure apps", so this is not possible for normal Gmail users.
Changes by Google after May 2022.
For these changes, we have to do the following changes to our code.
First go to Gmail account security.
Enable two-factor authentication.
Configure the App password in the google account.
Use the App password in the application.
MailMessage mail = new MailMessage();
mail.To.Add(email.Text.ToString().Trim());
mail.From = new MailAddress("your_Gmail_address");
mail.Subject = "Hello test email";
mail.Body = "<p>hello user<br/> How are you?</p>";
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Port = 587; // 25 465
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Host = "smtp.gmail.com";
smtp.Credentials = new System.Net.NetworkCredential("your_Gmail_address", "Your_gmail_app_password");
smtp.Send(mail);
Change your gmail password and try again, it should work after that.
Don't know why, but every time you change your hosting you have to change your password.
This code works for me, and also allows in gmail access from unsecure apps, and removing authentication in 2 steps:
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(MailAddress, Password)