I have tried most of the tweaks advised but none work.
I have tried :
1.Enabling 2-step verification on gmail
2.Enabled less secured app on gmail
3.Changed password to strong
Earlier I made an account for in gmail and by mistake entered a wrong phone number.But that email workjed fine on my C# application, I was able to send email. But, as I am India and client in US, so had put location as US. So when logged into gmail it logged me out saying some suspicious activity So I had to create a new account.
But since then it gave me an 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
heres my code :
SmtpClient client = new SmtpClient(txtsmtp.Text);
c ServicePointManager.ServerCertificateValidationCallback =delegate(object s, X509Certificate certificate,X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
client.UseDefaultCredentials = false;
client.Port = Convert.ToInt16(txtport.Text);
client.Credentials = new System.Net.NetworkCredential(txtuserid.Text, txtpassword.Text);
client.EnableSsl = true;
client.Timeout = 200000;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
MailMessage mail = new MailMessage();
mail.To.Add(txtsendto.Text);
mail.From = new MailAddress(cmbuseremailaddress.Text);
mail.Subject = txtsubject.Text;
mail.Body = txtmessage.Text;
mail.Bcc.Add(textBox1.Text);
mail.Priority = MailPriority.High;
try
{
client.Send(mail);
MessageBox.Show("Mail Sent Successfully.");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Here port no I am using is 587
So please let me know where and what I am missing.
Thanks
Related
I'm currently running into an issue that my code fails to authenticate against an Exchange server, where it runs fine with gmail.
Here's my code
client = new SmtpClient(smtp_server, smtp_port); //webmail.airbaltic.com
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.EnableSsl = smpt_enableSSL;
client.Timeout = 60 * 5 * 1000;
client.UseDefaultCredentials = false;
if (string.IsNullOrEmpty(smtp_domain))
{
client.Credentials = new NetworkCredential(smtp_user, smtp_password);
}
else
client.Credentials = new NetworkCredential(smtp_user, smtp_password, smtp_domain);
try
{
using (MailMessage mail = new MailMessage(mail_from, message.recep))
{
mail.Subject = mail_title;
mail.Body = message.message;
if (message.attachedFile != null)
mail.Attachments.Add(message.attachedFile);
client.Send(mail);
if (message.attachedFile != null)
message.attachedFile.Dispose();
}
}
catch (Exception e)
{
Debug.LogError(e);
}
And the response I'm getting back from the server is "530 5.7.1 Client was not authenticated". I've quintuple checked the password and username, as well as the domain and server adress, scoured the forums, even tried the same configuration from an external mail client (where it works), and nothing.
The server itself doesn't use SSL and uses NTLM for authentication.
EDIT:
Looking into this further (i.e. checking sent and recieved packets), it seems like the client I used for testing the username and password does authentication first, while SmtpClient.send() seems to skip it for some reason
My code is below:
MailMessage mail = new MailMessage();
mail.To.Add("******");
mail.CC.Add("*****");
mail.From = new MailAddress("*******");
mail.Subject = "Salesforce Credential for ";
mail.SubjectEncoding = Encoding.UTF8;
string Body = "<html><head></head><body>Hi,<br> Project Name: "
+ " <br> Username : "
+ " <br> Password : "
+ " <br> Security Token : ";
mail.Body = Body;
mail.BodyEncoding = Encoding.UTF8;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "webmail.***************.**.**";
string uid = "***********";
string pwd = "*********";
smtp.Credentials = new System.Net.NetworkCredential(uid, pwd);
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
// without this I get: The remote certificate is invalid according to the validation procedure.
smtp.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate2(#"********"));
//Or your Smtp Email ID and Password
smtp.EnableSsl = true;
smtp.Send(mail);
But I got this error:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
You are using SMTP not HTTP to send this message. SMTP typically does not use proxies but rather relays. I suspect the fundamental issue, based on your code, is that webmail.whateaver.xx.yy is the exchange web services endpoint and it is not capable nor configured to expose the SMTP port publicly. You'll need to get with whoever controls that system and work out what the proper means of access are.
If they can't expose SMTP -- which is higly likely, I would laugh at your face if you came and asked me to do that -- you probably will need to find an alternate outbound SMTP option or use Exchange Web Services to send the mail. See nuget for EWS client libraries.
Finally, while I've got the floor, please do the world a favor and do not email passwords around.
I want to send mail using SmtpClient class, but it not work.
Code:
SmtpClient smtpClient = new SmtpClient();
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(obMailSetting.UserName, obMailSetting.Password);
smtpClient.Host = obMailSetting.HostMail;
smtpClient.Port = obMailSetting.Port;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = obMailSetting.Connect_Security;//true
//smtpClient.UseDefaultCredentials = true;//It would work if i uncomment this line
smtpClient.Send(email);
It throws an exception:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated
I'm sure that username and password is correct. Is there any problem in my code?
Thanks.
You can try this :
MailMessage mail = new MailMessage();
mail.Subject = "Your Subject";
mail.From = new MailAddress("senderMailAddress");
mail.To.Add("ReceiverMailAddress");
mail.Body = "Hello! your mail content goes here...";
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.EnableSsl = true;
NetworkCredential netCre =
new NetworkCredential("SenderMailAddress","SenderPassword" );
smtp.Credentials = netCre;
try
{
smtp.Send(mail);
}
catch (Exception ex)
{
// Handle exception here
}
You can try this out :
In the Exchange Management Console, under the Server Configuration node, select Hub Transport and the name of the server. In the Receive Connectors pane, open either of the Recive Connectors (my default installation created 2) or you can create a new one just for TFS (I also tried this and it worked). For any of these connectors, open Properties and on the Permission Groups tab ensure that Anonymous Users is selected (it's not by default).
Or
You can also try this by initializing SmtpClient as follows:
SmtpClient smtp = new SmtpClient("127.0.0.1");
The server responds with 5.7.1 Client was not authenticated but only if you do not set UseDefaultCredentials to true. This indicates that the NetworkCredential that you are using is in fact wrong.
Either the user name or password is wrong or perhaps you need to specify a domain? You can use another constructor to specify the domain:
new NetworkCredential("MyUserName", "MyPassword", "MyDomain");
Or perhaps the user that you specify does not have the necessary rights to send mail on the SMTP server but then I would expect another server response.
i config my outlook 2010 by thie article to send and receive email from yahoo.com it works good without any problem.
i develop a small application to send my emails by my application but it gave me errors:
"unable to read data from the transport connection:an exist connection was
forcibly closed by the remote host."
my codes:
try
{
SmtpClient smtp = new SmtpClient("smtp.mail.yahoo.com", 465);
smtp.UseDefaultCredentials = true;
smtp.EnableSsl = true;
smtp.Credentials = new System.Net.NetworkCredential("myid", "mypass");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage mailMessage = new MailMessage();
mailMessage.From = new System.Net.Mail.MailAddress("myid#yahoo.com", "blabla");
mailMessage.To.Add(new System.Net.Mail.MailAddress("xxx#live.com", "xxx#live.com"));
mailMessage.Subject = "test";
mailMessage.Body = "test";
mailMessage.IsBodyHtml = false;
mailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
mailMessage.BodyEncoding = System.Text.Encoding.UTF8;
mailMessage.Priority = MailPriority.High;
smtp.Send(mailMessage);
Console.WriteLine("hooooooooooraaaaaaaaaaaaaaa");
Console.ReadKey();
}
catch (Exception err)
{
Console.WriteLine(err.InnerException.Message);
Console.ReadKey();
return;
}
From MSDN
Some SMTP servers require that the client be authenticated before the
server sends e-mail on its behalf. Set this property to true when this
SmtpClient object should, if requested by the server, authenticate
using the default credentials of the currently logged on user. For
client applications, this is the desired behavior in most scenarios.
The UseDefaultCredentials = true sends to the SMTP server the credentials of the current logged in user (i.e. the Windows User) not the credentials you have defined.
Try with UseDefaultCredentials = false
I'm just trying to get my hmailserver to send mail from my C# program. The part that's killing me is the SSL part.
I originally got this error: The SMTP server requires a secure connection or the client was not authenticated. The server response was: SMTP authentication is required.
So I added: smtp.EnableSsl = true; and now I get Server does not support secure connections.
Here is my code, this is driving me nuts. Do I have to create my own SSL or is there a way to disable SSL on hmailserver side?
MailMessage mail = new MailMessage("jlnt#ademo.net", "com", "NEW Item", emailBody);
SmtpClient smtp = new SmtpClient("1.1.1.250");
smtp.Port = 25;
NetworkCredential login = new NetworkCredential("ja#test.net", "dg");
smtp.Credentials = login;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Send(mail);
Ahh okay what you have to do is in HMailServer go to advanced- ip ranges. Create a new IP range for example if you 192.168.1.2, you have to make the range 192.168.1.1-192.168.1.3, then at bottom uncheck all the required smtp authentication boxes.
Annoying...
To enable secure connection to send email throught your email provider, you have to change the port number.
MailMessage mail = new MailMessage("jlnt#ademo.net", "com", "NEW Item", emailBody);
SmtpClient smtp = new SmtpClient("1.1.1.250");
//smtp.Port =25;
smtp.Port =587;
NetworkCredential login = new NetworkCredential("ja#test.net", "dg");
smtp.Credentials = login;
smtp.EnableSsl = true;
smtp.UseDefaultCredentials = false;
smtp.Send(mail);
i was having this issue, what i did was used localhost ip and EnableSsl to false
SmtpClient smtpClient = new SmtpClient();
smtpClient.Host = "127.0.0.1";
smtpClient.Credentials = new NetworkCredential("test#123test.com", "pass123");
smtpClient.EnableSsl = false;
// then your other statements like: from, to, body, to send mail
this guide will help you setup custom NetworkCredentials in HMailServer as used above, hope helps someone.
I have stumbled on this question when trying to configure hMailServer to work to e-mail sending from C#. I have tried the following:
C# SmtpClient - does not work with implicit SSL - see this question and answers
AegisImplicitMail from here - could not make it work with UTF-8 strings (I have diacritics in my strings)
MailKit from here - very powerful and mature, no problems using it
I aimed for the following:
decent security
being able to send e-mails to mainstream e-mail providers (e.g. Google, Yahoo) and reach Inbox
being able to receive e-mails from mainstream e-mail providers
C# code
public void MailKitSend(string senderEmail, string senderName, string subject, string bodyText, string receivers, string receiversCc)
{
// no receivers, no e-mail is sent
if (string.IsNullOrEmpty(receivers))
return;
var msg = new MimeMessage();
msg.From.Add(new MailboxAddress(Encoding.UTF8, senderName, senderEmail));
msg.Subject = subject;
var bb = new BodyBuilder {HtmlBody = bodyText};
msg.Body = bb.ToMessageBody();
IList<string> receiversEmails = receivers.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (string receiver in receiversEmails)
msg.To.Add(new MailboxAddress(Encoding.UTF8, "", receiver));
if (!string.IsNullOrEmpty(receiversCc))
{
IList<string> receiversEmailsCc = receiversCc.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (string receiverCc in receiversEmailsCc)
msg.Cc.Add(new MailboxAddress(Encoding.UTF8, "", receiverCc));
}
try
{
var sc = new MailKit.Net.Smtp.SmtpClient();
if (!string.IsNullOrWhiteSpace(SmtpUser) && !string.IsNullOrWhiteSpace(SmtpPassword))
{
sc.Connect(SmtpServer, 465);
sc.Authenticate(SmtpUser, SmtpPassword);
}
sc.Send(msg);
sc.Disconnect(true);
}
catch (Exception exc)
{
string err = $"Error sending e-mail from {senderEmail} ({senderName}) to {receivers}: {exc}";
throw new ApplicationException(err);
}
}
hMailServer configuration
1) Opened ports - 25, 143, 465, 995 are opened to ensure that you can send and receive e-mail
2) TCP/IP ports configuration
SMTP / 0.0.0.0 / port 25 / no security (allow receiving start process)
SMTP / 0.0.0.0 / port 465 / SSL/TLS security (must define a SSL certificate)
POP3 / 0.0.0.0 / port 995 / SSL/TLS security (use the same SSL certificate)
3) pre C# testing
Run Diagnostics from hMailServer Administrator
Use an e-mail client that allows manual configuration of various settings such as ports for each protocol, security. I have used Thunderbird. Include sending of e-mails to external providers and receiving e-mails from them (I have tried with Gmail).
I made no changes in IP ranges and left the implicit ones (My computer and the Internet).
Although it's 7 years passed since the accepted answer was posted - I also upvoted it in the beginning - I want to emphasize that the suggested solution disables the whole authentication process which is unnecessary. The problem is the line with :
smtp.UseDefaultCredentials = false;
Just remove that line and it should work.
I post here the working solution for me (note that I'm not using SSL):
MailMessage mail = new MailMessage("a1#test.com", "foooo#gmail.com");
SmtpClient client = new SmtpClient();
client.Credentials = new NetworkCredential("a1#test.com", "test");
client.Port = 25;
client.EnableSsl = false;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "...IPv4 Address from ipconfig...";
mail.Subject = "this is a test email.";
mail.Body = "this is my test email body";
client.Send(mail);