ฉันได้ลองคำตอบทั้งหมดข้างต้นแล้ว แต่ยังคงได้รับข้อผิดพลาดนี้กับบัญชี 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 ขณะนี้ Microsoft ไม่แนะนำให้ใช้ไคลเอ็นต์ System.Net.Mail Smtp เนื่องจากปัญหาด้านความปลอดภัยและคุณควรใช้ MailKit แทน การใช้ Mailkit ทำให้ฉันมีข้อความแสดงข้อผิดพลาดที่ชัดเจนขึ้นซึ่งฉันสามารถเข้าใจการค้นหาสาเหตุที่แท้จริงของปัญหา (ปัญหาใบอนุญาต) คุณสามารถรับ Mailkit ได้โดยดาวน์โหลดเป็นแพ็คเกจNuget
อ่านเอกสารเกี่ยวกับไคลเอ็นต์ Smtp สำหรับข้อมูลเพิ่มเติม:
https://docs.microsoft.com/es-es/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
นี่คือวิธีที่ฉันใช้ SmtpClient กับ MailKit
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);
}