Как правило, зависание при вызове client.Connect
указывает на то, что хост или порт, к которому вы пытаетесь подключиться, недоступны.Проверьте правильность хоста и порта.
Если они являются правильными , убедитесь, что вы используете последнюю версию MailKit, так как некоторые старые версии использовали Socket.BeginConnect (string, int ...)
, что на IPv6-с включенными операционными системами, иногда пытался использовать IPv4 поверх IPv6 и зависать в некоторых ситуациях (например, при использовании антивирусного сканера, такого как Avast).
Более новые версии MailKit (> = 2.1.4 и версии до 2.0)) выполнить поиск DNS удаленного хоста и вручную указать правильное семейство адресов, которое будет использоваться при создании экземпляра Socket (IPv4 против IPv6), чтобы избежать этой проблемы.
Также возможно, что зависание вызвано SSL/ TLS проверяет аннулирование сертификата с не отвечающим центром сертификации.Вы можете отключить проверки отзыва сертификатов, используя следующий фрагмент кода:
client.CheckCertificateRevocation = false;
Просто убедитесь, что это свойство установлено перед тем, как вызовет Connect
.
Itвозможно, стоит проверить доступ к вашему SMTP-серверу, создав новое консольное приложение в Visual Studio и вставив следующий код и проверив его работоспособность:
using System;
using System.Threading;
using System.Threading.Tasks;
using MailKit;
using MailKit.Net.Smtp;
namespace ConsoleApp {
public class Program
{
static void Main (string[] args)
{
using (var client = new SmtpClient (new ProtocolLogger ("smtp.log"))) {
using (var cts = new CancellationTokenSource (60000)) {
try {
client.Connect ("your-host.com", 25, false, cts.Token);
client.Disconnect (true);
} catch (Exception ex) {
Console.WriteLine ("Error connecting: {0}", ex.Message);
Console.WriteLine (ex.StackTrace);
}
}
}
}
}
}
Также было бы интересно узнать, работает ли ваше приложение для Androidвозникают проблемы с подключением к smtp.gmail.com
через порт 465
(useSsl = true
).