ฉันมีโปรแกรมที่ฉันต้องการใช้งานบนเซิร์ฟเวอร์ที่สามารถตรวจสอบเซิร์ฟเวอร์ต่างๆ บนเครือข่าย และส่งการแจ้งเตือนทางอีเมลเมื่อมีสถานการณ์บางอย่างที่เกี่ยวข้องกับเซิร์ฟเวอร์เหล่านั้นเกิดขึ้น
ขณะนี้ ฉันสามารถรันโปรแกรมนี้บนเครื่องของฉันได้ และสั่งให้มันปิดอีเมลได้ (โดยใช้ gmail SMTP) อย่างไรก็ตาม เมื่อฉันพยายามเรียกใช้บนเซิร์ฟเวอร์ผ่านทางพรอมต์คำสั่ง มันจะเกิดข้อยกเว้นต่อไปนี้:
Unhandled Exception: System.Net.Mail.SmtpException: Failure sending mail. --->
System.Net.WebException: Unable to connect to the remote server --->
System.Net.Sockets.SocketException: A connection attempt failed
because the connected party did not properly respond after a period of time,
or established connection failed because connected host has failed to respond
xxx.xxx.xxx.xxx:587
รหัสที่เกี่ยวข้องกับการส่งอีเมลนั้นค่อนข้างง่าย:
static void sendEmail(MailAddressCollection mailCollection, string emailSender,
string emailDisplayName, string emailPassword,
string subject, string body) {
MailAddress fromAddress = new MailAddress(emailSender, emailDisplayName);
SmtpClient smtpClient = new SmtpClient {
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, emailPassword)
};
MailMessage message = new MailMessage {
From = fromAddress,
Subject = subject,
Body = body
};
foreach (MailAddress mailAddress in mailCollection) {
message.To.Add(mailAddress);
}
smtpClient.Send(message);
}
เซิร์ฟเวอร์ที่เป็นปัญหาคือกล่อง 2008R2 และไม่ได้เปิดใช้งาน Windows Firewall นอกจากนี้ พอร์ต 25 ยังเปิดอยู่อย่างแน่นอน เนื่องจากเซิร์ฟเวอร์นี้สามารถส่งอีเมลประเภทอื่นๆ ได้ (โดยเฉพาะอีเมลที่สร้างโดยเราเตอร์อีเมล Dynamics CRM)
อะไรอาจทำให้เกิดข้อผิดพลาดนี้