Отправьте электронное письмо с помощью System.Net.Mail через gmail
Я хочу отправить электронное письмо через сервер gmail. Я поставил следующий код, но он застревает во время отправки. Любая идея, пожалуйста....
MailMessage mail = new MailMessage();
mail.From = new System.Net.Mail.MailAddress("[email protected]");
//create instance of smtpclient
SmtpClient smtp = new SmtpClient();
smtp.Port = 465;
smtp.UseDefaultCredentials = true;
smtp.Host = "smtp.gmail.com";
smtp.EnableSsl = true;
//recipient address
mail.To.Add(new MailAddress("[email protected]"));
//Formatted mail body
mail.IsBodyHtml = true;
string st = "Test";
mail.Body = st;
smtp.Send(mail);
xxxx.com - это почтовый домен в приложениях Google.
Спасибо...
Ответы
Ответ 1
MailMessage mail = new MailMessage();
mail.From = new System.Net.Mail.MailAddress("[email protected]");
// The important part -- configuring the SMTP client
SmtpClient smtp = new SmtpClient();
smtp.Port = 587; // [1] You can try with 465 also, I always used 587 and got success
smtp.EnableSsl = true;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network; // [2] Added this
smtp.UseDefaultCredentials = false; // [3] Changed this
smtp.Credentials = new NetworkCredential(mail.From, "password_here"); // [4] Added this. Note, first parameter is NOT string.
smtp.Host = "smtp.gmail.com";
//recipient address
mail.To.Add(new MailAddress("[email protected]"));
//Formatted mail body
mail.IsBodyHtml = true;
string st = "Test";
mail.Body = st;
smtp.Send(mail);
Ответ 2
Я попробовал вышеуказанный код С# для отправки почты из Gmail в свой корпоративный идентификатор. Во время выполнения приложения управление остановилось на неопределенное время в заявлении smtp.Send(mail);
В то время как Googling, я наткнулся на аналогичный код, который работал на меня. Я размещаю этот код здесь.
class GMail
{
public void SendMail()
{
string pGmailEmail = "[email protected]";
string pGmailPassword = "GmailPassword";
string pTo = "ToAddress"; //[email protected]
string pSubject = "Test From Gmail";
string pBody = "Body"; //Body
MailFormat pFormat = MailFormat.Text; //Text Message
string pAttachmentPath = string.Empty; //No Attachments
System.Web.Mail.MailMessage myMail = new System.Web.Mail.MailMessage();
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/smtpserver",
"smtp.gmail.com");
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/smtpserverport",
"465");
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/sendusing",
"2");
//sendusing: cdoSendUsingPort, value 2, for sending the message using
//the network.
//smtpauthenticate: Specifies the mechanism used when authenticating
//to an SMTP
//service over the network. Possible values are:
//- cdoAnonymous, value 0. Do not authenticate.
//- cdoBasic, value 1. Use basic clear-text authentication.
//When using this option you have to provide the user name and password
//through the sendusername and sendpassword fields.
//- cdoNTLM, value 2. The current process security context is used to
// authenticate with the service.
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//Use 0 for anonymous
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/sendusername",
pGmailEmail);
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/sendpassword",
pGmailPassword);
myMail.Fields.Add
("http://schemas.microsoft.com/cdo/configuration/smtpusessl",
"true");
myMail.From = pGmailEmail;
myMail.To = pTo;
myMail.Subject = pSubject;
myMail.BodyFormat = pFormat;
myMail.Body = pBody;
if (pAttachmentPath.Trim() != "")
{
MailAttachment MyAttachment =
new MailAttachment(pAttachmentPath);
myMail.Attachments.Add(MyAttachment);
myMail.Priority = System.Web.Mail.MailPriority.High;
}
SmtpMail.SmtpServer = "smtp.gmail.com:465";
SmtpMail.Send(myMail);
}
}
Ответ 3
Установите smtp.UseDefaultCredentials = false и используйте
smtp.Credentials = новый NetworkCredential (gMailAccount, пароль);
Ответ 4
Использовать номер порта 587
Со следующим кодом он будет работать успешно.
MailMessage mail = new MailMessage();
mail.From = new MailAddress("[email protected]", "Enquiry");
mail.To.Add("[email protected]");
mail.IsBodyHtml = true;
mail.Subject = "Registration";
mail.Body = "Some Text";
mail.Priority = MailPriority.High;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
//smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("[email protected]", "<my gmail pwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(mail);
Но есть проблема с использованием gmail. Письмо будет отправлено успешно, но почтовый ящик получателя будет иметь адрес gmail в "from address" вместо "from address", упомянутый в коде.
Чтобы решить эту проблему, выполните действия, указанные в следующей ссылке.
http://karmic-development.blogspot.in/2013/10/send-email-from-aspnet-using-gmail-as.html
перед выполнением всех вышеперечисленных шагов вам необходимо пройти аутентификацию вашей учетной записи gmail, чтобы разрешить доступ к вашему приложению, а также к устройствам. Проверьте все действия по аутентификации учетной записи по следующей ссылке:
http://karmic-development.blogspot.in/2013/11/allow-account-access-while-sending.html
Ответ 5
ActiveUp.Net.Mail.SmtpMessage smtpmsg = new ActiveUp.Net.Mail.SmtpMessage();
smtpmsg.From.Email = "[email protected]";
smtpmsg.To.Add(To);
smtpmsg.Bcc.Add("[email protected]");
smtpmsg.Subject = Subject;
smtpmsg.BodyText.Text = Body;
smtpmsg.Send("mail.test.com", "[email protected]", "[email protected]", ActiveUp.Net.Mail.SaslMechanism.Login);
Ответ 6
Это сработало для меня:
MailMessage message = new MailMessage("[email protected]", toemail, subjectEmail, comments);
message.IsBodyHtml = true;
try {
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Timeout = 2000;
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("[email protected]", "mypassord");
client.Send(message);
message.Dispose();
client.Dispose();
}
catch (Exception ex) {
Debug.WriteLine(ex.Message);
}
НО (на момент написания этой статьи - октябрь 2017 года)
Вам необходимо включить "Разрешить менее безопасные приложения" в опции "Приложения с доступом к учетной записи" в настройках безопасности "Моя учетная запись" для защиты/конфиденциальности Google (https://myaccount.google.com)