Gmail: Как отправить электронное письмо программно
Возможный точный дубликат: отправка электронной почты в C#.NET через Gmail
Привет,
Я пытаюсь отправить письмо с помощью gmail:
Я пробовал различные примеры, которые я нашел на этом и других сайтах, но всегда получаю одну и ту же ошибку:
Невозможно подключиться к удаленному серверу - > System.net.Sockets.SocketException: не может быть установлено соединение, потому что цель активно отказала ему в этом 209.85.147.109:587
public static void Attempt1()
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("MyEmailAddress@gmail.com", "MyPassWord"),
EnableSsl = true
};
client.Send("MyEmailAddress@gmail.com", "some.email@some.com", "test", "testbody");
}
Есть идеи?
ОБНОВИТЬ
Подробнее
Может быть, я должен сказать, что другие попытки, которые я сделал, дали мне ту же ошибку: (Обратите внимание, когда я не указал порт, он попробовал порт 25)
public static void Attempt2()
{
var fromAddress = new MailAddress("MyEmailAddy@gmail.com", "From Name");
var toAddress = new MailAddress("MyEmailAddy@dfdf.com", "To Name");
const string fromPassword = "pass";
const string subject = "Subject";
const string body = "Body";
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body
}
) { smtp.Send(message); }
}
public static void Attempt3()
{
MailMessage mail = new MailMessage();
mail.To.Add("MyEmailAddy@dfdf.com");
mail.From = new MailAddress("MyEmailAddy@gmail.com");
mail.Subject = "Email using Gmail";
string Body = "Hi, this mail is to test sending mail" +
"using Gmail in ASP.NET";
mail.Body = Body;
mail.IsBodyHtml = true;
SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Credentials = new System.Net.NetworkCredential
("MyEmailAddy@gmail.com", "pass");
smtp.EnableSsl = true;
smtp.Send(mail);
}
6 ответов
Я использую следующий код:
SmtpClient sc = new SmtpClient("smtp.gmail.com");
NetworkCredential nc = new NetworkCredential("username", "password");//username doesn't include @gmail.com
sc.UseDefaultCredentials = false;
sc.Credentials = nc;
sc.EnableSsl = true;
sc.Port = 587;
try {
sc.Send(mm);
} catch (Exception ex) {
EventLog.WriteEntry("Error Sending", EventLogEntryType.Error);
}
С помощью следующего кода он будет работать успешно.
MailMessage mail = new MailMessage();
mail.From = new MailAddress("abc@mydomain.com", "Enquiry");
mail.To.Add("abcdef@yahoo.com");
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("xyz@gmail.com", "<my gmail pwd>");
smtp.EnableSsl = true;
//smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Send(mail);
Но есть проблема с использованием Gmail. Письмо будет успешно отправлено, но в папке "Входящие" получателя будет указан адрес электронной почты в поле "from" вместо адреса "from", указанного в коде.
Чтобы решить эту проблему, пожалуйста, следуйте инструкциям, приведенным по следующей ссылке.
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
Вы уверены, что ваша учетная запись GMail настроена для разрешения подключений POP/SMTP? Это настраиваемая опция, которую вы можете включать и выключать по своему усмотрению.
Вот мой ресурс подключения для подключения к Gmail из Java
<!-- Java Mail -->
<Resource name="mail/MailSession" auth="Container" type="javax.mail.Session"
mail.debug="true"
mail.transport.protocol="smtp"
mail.smtp.host="smtp.gmail.com"
mail.smtp.user="youremail@gmail.com"
mail.smtp.password="yourpassword"
mail.smtp.port="465"
mail.smtp.starttls.enable="true"
mail.smtp.auth="true"
mail.smtp.socketFactory.port="465"
mail.smtp.socketFactory.class="javax.net.ssl.SSLSocketFactory"
mail.smtp.socketFactory.fallback="false"
mail.store.protocol="pop3"
mail.pop3.host="pop.gmail.com"
mail.pop3.port="995" />
Подключите свою учетную запись Gmail к защищенным портам (465 для SMTP и 995 для POP3) и используйте любую доступную фабрику.NET SSL для безопасного подключения к Gmail.
Вы можете увидеть мой пост здесь по адресу http://codersatwork.wordpress.com/2010/02/14/sending-email-using-gmail-smtp-server-and-spring-mail/ где объясняется, как использовать Spring Mail для отправка электронной почты через SMTP-сервер Gmail.
Я использовал Java, но вы можете увидеть конфигурацию и использовать ее в своем коде C#.