c # тайм-аут отправки электронной почты - PullRequest
0 голосов
/ 10 мая 2018
MailMessage msg = new MailMessage("teunenrichard@gmail.com",        "ipadcraze@hotmail.com", "Movies this month", "Hello this is a test mail");
msg.IsBodyHtml = false;
SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
smtp.UseDefaultCredentials = false;
NetworkCredential xre = new System.Net.NetworkCredential("teunenrichard@gmail.com", "Password");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Credentials = xre;
smtp.EnableSsl = true;
smtp.Send(msg);

Это код, который я запускаю в форме.загрузить, чтобы сделать тестовое электронное письмо, но оно не будет выполнено и сообщает, что время операции истеклоя все перепробовал помогите пожалуйста MessageBox.Show("mail sent");

Ответы [ 3 ]

0 голосов
/ 10 мая 2018

Для лучшего понимания сообщения об ошибке попробуйте поместить свой код в блок Try-Catch, а затем просмотрите внутреннее исключение улова в MessageBox.Show ().Он может предоставить вам более подробную информацию об ошибке и может помочь / направить вас в правильном направлении для ее устранения.Примерно так: -

try
{
  //your email sending logic
}
catch(Exception ex)
{
  MessageBox.Show(ex.InnerException.ToString());
}
0 голосов
/ 10 мая 2018

Вы должны отправлять свои письма, используя фоновый поток, чтобы убедиться, что ваш поток пользовательского интерфейса не блокируется и сразу возвращается.Вы можете сделать что-то вроде этого

 private async void sendButton_Click(object sender, EventArgs e)
        {
            var result = await SendMail();
            if (result)
            {
                MessageBox.Show("Mail sent");
            }
        }

        private Task<bool> SendMail()
        {
            var task = Task.Run<bool>(() =>
            {
                MailMessage msg = new MailMessage("sendermail@gmail.com", "recievermail@gmail.com", "Movies this month", "Hello this is a test mail");
                msg.IsBodyHtml = false;

                using(SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587))
                {
                    smtp.UseDefaultCredentials = false;
                    NetworkCredential xre = new NetworkCredential("sendermail@gmail.com", "Password");
                    smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                    smtp.Credentials = xre;
                    smtp.EnableSsl = true;
                    smtp.Send(msg);

                    return true;
                }

            });
            return task;
        }
0 голосов
/ 10 мая 2018

Используйте свойство «Тайм-аут» для вашего клиента SMTP. Я думаю, 0 - это максимум

 smtp.Timeout = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...