возникли проблемы с отправкой почты в asp.net Приложение core 5

#c# #asp.net-core

#c# #asp.net-ядро

Вопрос:

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

Способ 1:

 public class MailSender : IMailSender
{
    public async Task SendMail(string to = null, string title = null, string body = null)
    {
        var client = new SmtpClient("smtp.gmail.com", 587)
        {
            Credentials = new NetworkCredential("mygmail@gmail.com", "password"),
            EnableSsl = true,
            DeliveryMethod = SmtpDeliveryMethod.Network
        };
        client.SendAsync("mygmail@gmail.com", to, title, body, "mail send success");
    }
}
 

Способ 2:

 public class MailSender : IMailSender
{
    public async Task SendMail(string to = null, string title = null, string body = null)
    {
        MailAddress sender = new MailAddress("mygmail@gmail.com");
        MailAddress reciver = new MailAddress(to);
        MailMessage message = new MailMessage();
        message.From = sender;
        message.To.Add(reciver);            
        message.Subject = title;
        message.Body = body;

        SmtpClient smtp = new SmtpClient();
        smtp.Host = "smtp.gmail.com";
        smtp.Port = 587;
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
        smtp.UseDefaultCredentials = false;
        smtp.Credentials = new NetworkCredential()
        { Password = "password", UserName = "mygmail@gmail.com" };
        await smtp.SendMailAsync(message);            
    }       
}
 

Я не знаю, почему оно не работает. Исключений не возникает, и все настройки безопасности Google установлены.

Комментарии:

1. Что не работает? Вы получаете исключение?

2. не отмечая, что это не создает никаких исключений, это просто не отправляет почту

3. все настройки, связанные с безопасностью, в аккаунте Google установлены

4. Зарегистрировали ли вы реализацию для службы как переходный процесс при запуске (настройка служб)? Если да, то попадают ли точки останова?

5. да, я сделал это, служба добавляется как переходная, и точка останова попадает

Ответ №1:

ребята, я не знаю, почему это не работало раньше, но я переписал код таким образом, и он сработал, извините

 namespace MyShop.Services
{
    public class MailSender : IMailSender
    {
        public async Task SendMail(string FromApp,string ToUser, string Title, string MailBody,string Password)
        {
            SmtpClient smtpClient = new("smtp.gmail.com", 587)
            {
                Credentials = new NetworkCredential(FromApp, Password),
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network
            };

            MailMessage mail = new
                MailMessage(FromApp,ToUser ,Title ,MailBody);
            smtpClient.SendAsync(mail, null);
        }
    }
}
 

Комментарии:

1. У меня был код на .net Core 3.1, который там работал, но при использовании его с .net core 5 выдавал мне эту ошибку: SMTP-серверу требуется безопасное соединение или клиент не прошел проверку подлинности. Ответ сервера был: 5.7.57 Клиент не прошел проверку подлинности для отправки почты. Изменение кода на это устраняет проблему.

2. если вы используете gamil для отправки электронной почты, вам следует включить разрешить менее защищенное приложение в настройках безопасности вашего аккаунта Google