Почему я использую Google SMTP не может отправить электронную почту? - PullRequest
4 голосов
/ 28 апреля 2011

Здравствуйте, у меня есть следующая программа для отправки электронной почты с использованием "smtp.gmail.com:587"

namespace TestMailServer
{
    class Program
    {
        static void Main(string[] args)
        {
            MailMessage mail = new MailMessage();
            SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
            mail.From = new MailAddress("myTest@gmail.com");
            mail.To.Add("myTest2@gmail.com");
            mail.Subject = "Test Mail";
            mail.Body = "This is for testing SMTP mail";

            SmtpServer.Port = 587;
            SmtpServer.Credentials = new System.Net.NetworkCredential("myTest@gmail.com", "myPassword");
            SmtpServer.EnableSsl = true;
            SmtpServer.Send(mail);
            Console.WriteLine("Send out");

        }
    }
}

myTest@gmail.com, myTest2@gmail.com действительно существуют и myTest @ gmail.пароль ком - мой пароль.Почему я получил следующую ошибку:

Необработанное исключение: System.Net.Mail.SmtpException: SMTP-сервер требует безопасного соединения или клиент не прошел проверку подлинности.Ответ сервера: 5.5.1 Требуется аутентификация.Узнайте больше на System.Net.Mail.MailCommand.CheckResponse (SmtpStatusCode statusCode, String response) в System.Net.Mail.MailCommand.Send (SmtpConnection conn, команда Byte [], String from)
в System.Net.Mail.SmtpTransport.SendMail (отправитель MailAddress, получатели MailAddressCollection, String deliveryNotify, SmtpFailedRecipientException и исключение) в System.Net.Mail.SmtpClient.Send (сообщение MailMessage) в TestMailServer.Program.Main (визуальная студия) в строке:2010 \ Projects \ TestMailServer \ TestMailServer \ Program.cs: строка 26 Нажмите любую клавишу для продолжения.,.

Ответы [ 3 ]

5 голосов
/ 28 апреля 2011

Я не уверен, что является причиной вашей проблемы. Вот некоторый код, который я использовал для успешной отправки электронной почты через учетную запись Gmail:

const string from = "...";
var fromAddr = new MailAddress(from, "Bug Tracker");
var toAddr = new MailAddress("...@...", "...");
var client = new SmtpClient {
    Host = "smtp.gmail.com",
    Port = 587,
    EnableSsl = true,
    DeliveryMethod = SmtpDeliveryMethod.Network,
    UseDefaultCredentials = false,
    Timeout = 30 * 1000,
    Credentials = new NetworkCredential(fromAddr.Address, "...")
};
using (var msg = new MailMessage(fromAddr, toAddr)) {
    msg.Subject = "...";
    msg.Body = string.Format("username: {0}\nversion: {1}\n\n{2}", Environment.UserName, Assembly.GetExecutingAssembly().GetName().Version.ToString(3), cbtext);
    client.Send(msg);
}
2 голосов
/ 02 мая 2011

У меня был код, который разместил Ферруччо, и недавно он перестал работать. Я перенес мои настройки в файл .config для моего сайта, и он снова начал работать:

<system.net>
    <mailSettings>
        <smtp from="fromEmail" deliveryMethod="Network">
            <network defaultCredentials="false" enableSsl="true" host="smtp.gmail.com" port="587"
                 userName="fromEmail" password="password"/>
        </smtp>
    </mailSettings>
</system.net>
1 голос
/ 28 апреля 2011

Насколько я помню, по умолчанию UseDefaultCredentialsProperty имеет значение true.Так что это может привести к ошибке аутентификации, которую вы получили.попробуйте добавить эти строки из предыдущего ответа в ваш код

SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network;
SmtpServer.UseDefaultCredentials = false;

Я столкнулся с несколькими странными исключениями, если не установить свойство DeliveryMethod явно.

...