#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