Ошибка при отправке почты

119
18 сентября 2019, 14:40

Всем привет. Пишу приложение на ASP.NET Core. Использую MailKit для отправки почты. Проблема такова: невозможно подключиться к SMTP серверу (причину так и не понял). Решил использовать SSL. Код:

public async Task SendEmailAsync(string email, string subject, string message)
    {
        try
        {
            var emailMessage = new MimeMessage();
            emailMessage.From.Add(new MailboxAddress("Administration", "test@mail.ru"));
            emailMessage.To.Add(new MailboxAddress(email));
            emailMessage.Subject = subject;
            emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
            {
                Text = message
            };
            using (var client = new SmtpClient())
            {
                await client.ConnectAsync("smtp.mail.ru", 25, false);
                await client.AuthenticateAsync("test@mail.ru", "*****");
                await client.SendAsync(emailMessage);
                await client.DisconnectAsync(true);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Ошибка при отправке почты" + e.Message);
        }
    }

Ошибка: An error occurred while attempting to establish an SSL or TLS connection. One possibility is that you are trying to connect to a port which does not support SSL/TLS. The other possibility is that the SSL certificate presented by the server is not trusted by the system for one or more of the following reasons: The server is using a self-signed certificate which cannot be verified. The local system is missing a Root or Intermediate certificate needed to verify the server's certificate. The certificate presented by the server is expired or invalid. See https://github.com/jstedfast/MailKit/blob/master/FAQ.md#InvalidSslCertificate for possible solutions.

Произошла ошибка при попытке установить соединение SSL или TLS. Возможно, вы пытаетесь подключиться к порту, который не поддерживает SSL / TLS. Другая возможность состоит в том, что сертификат SSL, представленный сервером, не является доверенным для системы по одной или нескольким из следующих причин: Сервер использует самозаверяющий сертификат, который невозможно проверить. В локальной системе отсутствует корневой или промежуточный сертификат, необходимый для проверки сертификата сервера. Срок действия сертификата, предоставленного сервером, истек или недействителен. См. для возможных решений.

Смотрел по ссылке. Решение не помогло. Решил сделать так, как описано здесь: Подтверждение Email в ASP.NET Identity

Не помогло.

И что более странно, то, что пару раз письмо отправлялось, но позже перестало. Пробовал указать другие порты, не помогло. Я так и не понял, в чем дело.

Буду рад слышать ваши ответы.

Answer 1

Вот такой код отправки у меня когда то работал, это его копипаста, так как проверить сейчас его мне не на чем.

using(var client = new SmtpClient("smtp.mail.ru", 25))
{
    client.Credentials = new NetworkCredential("***@mail.ru", "*****");
    client.EnableSsl = true;    
    var message = new MailMessage("***@mail.ru", "email@to.com", args[0], args[1]);  
    message.IsBodyHtml = true;
    client.Send(message);   
}    

Взял вашу версию программы, отправил себе несколько писем на mail.ru и на gmail.com, все работает идеально.

class EmailSender
{
    public async Task SendEmailAsync(string email, string subject, string message)
    {
        try
        {
            var emailMessage = new MimeMessage();
            emailMessage.From.Add(new MailboxAddress("Administration", "*****@mail.ru"));
            emailMessage.To.Add(new MailboxAddress(email));
            emailMessage.Subject = subject;
            emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
            {
                Text = message
            };
            using (var client = new MailKit.Net.Smtp.SmtpClient())
            {
                client.Timeout = (int)TimeSpan.FromSeconds(5).TotalMilliseconds;
                await client.ConnectAsync("smtp.mail.ru", 25, false);
                await client.AuthenticateAsync("*****@mail.ru", "**********");
                await client.SendAsync(emailMessage);
                await client.DisconnectAsync(true);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("Ошибка при отправке почты" + e.Message);
        }
    }
}
READ ALSO
Как привязать к строчкам ListBox свои данные?

Как привязать к строчкам ListBox свои данные?

Как привязать к строчкам ListBox свои данные? Например, какой-нить свой класс DataRec?

92
Какие классы в C# нельзя наследовать?

Какие классы в C# нельзя наследовать?

Запечатанные классы точно нельзя наследоватьЕсть ли еще какие-то варианты?

122
Работа с Epub при помощи EpubSharp C#

Работа с Epub при помощи EpubSharp C#

Использую бибиблиотеку EpubSharp для того, чтобы сохранить имеющийся текст в форматеepub

103