위의 모든 답변을 시도했지만 Office 365 계정에서 여전히이 오류가 발생합니다. 보안 수준이 낮은 앱을 허용하면 코드가 Google 계정 및 smtp.gmail.com에서 제대로 작동하는 것 같습니다.
시도해 볼 수있는 다른 제안이 있습니까?
내가 사용하는 코드는 다음과 같습니다.
int port = 587;
string host = "smtp.office365.com";
string username = "smtp.out@mail.com";
string password = "password";
string mailFrom = "noreply@mail.com";
string mailTo = "to@mail.com";
string mailTitle = "Testtitle";
string mailMessage = "Testmessage";
using (SmtpClient client = new SmtpClient())
{
MailAddress from = new MailAddress(mailFrom);
MailMessage message = new MailMessage
{
From = from
};
message.To.Add(mailTo);
message.Subject = mailTitle;
message.Body = mailMessage;
message.IsBodyHtml = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = host;
client.Port = port;
client.EnableSsl = true;
client.Credentials = new NetworkCredential
{
UserName = username,
Password = password
};
client.Send(message);
}
업데이트 및 해결 방법 :
Smtp Client를 Mailkit으로 변경하여 문제를 해결했습니다. System.Net.Mail Smtp 클라이언트는 이제 보안 문제로 인해 Microsoft에서 사용하지 않는 것이 좋으며 대신 MailKit을 사용해야합니다. Mailkit을 사용하면 문제의 근본 원인 (라이선스 문제)을 찾을 수있는 명확한 오류 메시지가 표시되었습니다. 메일 킷을 Nuget 패키지 로 다운로드하여 얻을 수 있습니다 .
자세한 내용은 Smtp 클라이언트에 대한 설명서를 참조하십시오.
https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
MailKit으로 SmtpClient를 구현 한 방법은 다음과 같습니다.
int port = 587;
string host = "smtp.office365.com";
string username = "smtp.out@mail.com";
string password = "password";
string mailFrom = "noreply@mail.com";
string mailTo = "mailto@mail.com";
string mailTitle = "Testtitle";
string mailMessage = "Testmessage";
var message = new MimeMessage();
message.From.Add(new MailboxAddress(mailFrom));
message.To.Add(new MailboxAddress(mailTo));
message.Subject = mailTitle;
message.Body = new TextPart("plain") { Text = mailMessage };
using (var client = new SmtpClient())
{
client.Connect(host , port, SecureSocketOptions.StartTls);
client.Authenticate(username, password);
client.Send(message);
client.Disconnect(true);
}