Грабли, которые подстерегают человека, которому надо отправить почту через почтовый домен, хостящийся на google apps из .net-сайта. Грабли описаны на примере встроенных в фреймворк классов из пространства System.Net.Mail.
1) Надо обязательно использовать TLS/SSL. В web.config это выглядит так:
<system.net>
<mailSettings>
<smtp from=from_person@domain.com deliveryMethod="network">
<network host="smtp.gmail.com." port="587" userName=from_person@domain.com password="PASSWORD"/>
</smtp>
</mailSettings>
</system.net>
2) Кроме того что в конфиге надо правильный порт сказать, в коде надо проставить свойство EnableSsl у SmtpClient (не знаю, почему это не вынесено в <mailSettings>
private static void internalSend(SmtpClient smtp, string email, MailMessage mm)
{…
smtp.EnableSsl = true;
smtp.Send(mm);
}
3) На хостинговом сервере может не пройти проверка сертификата SMTP сервера. Я решил этот вопрос радикально – отключил проверку:
public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
}private static SmtpClient getSmtpClient()
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);return new SmtpClient();
}
4) Сам почтовый аккакунт, из-под которого отправляется почта, должен быть активирован в гугле. Это значит, что
- запись для аккаунта создана в контрольной панели google mail
- под самим аккакнтом на gmail заходили хоть раз
- в свойствах аккаунта стоит разрешение подключаться по POP3/SMTP
И даже после этого у вас может получиться отправлять почту совсем не сразу. У меня например гугль начал отсылать письма где-то через день после того как я под аккаунтом залогинился в gmail. Наверное, что-то обсчитывал :-)