在 Azure Web 或辅助角色中使用 SmtpClient 时出现异常。
我创建了一个控制台应用程序以通过 RDP 在角色 VM 上手动运行以重现:
using System;
using System.Net;
using System.Net.Mail;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
var mailClient = new SmtpClient("mail.redacted.com", 587);
mailClient.EnableSsl = true;
mailClient.DeliveryFormat = SmtpDeliveryFormat.International;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailClient.UseDefaultCredentials = false;//SET THIS FIRST OR IT WIPES OUT CREDENTIALS
NetworkCredential netCreds = new NetworkCredential("mail@redacted.com", "12345 same combination on my luggage");
mailClient.Credentials = netCreds;
MailMessage message = new MailMessage();
message.SubjectEncoding = Encoding.UTF8;
message.BodyEncoding = Encoding.UTF8;
message.IsBodyHtml = false;
message.From = new MailAddress("mike@redacted.com");
message.To.Add(new MailAddress("mike@redacted.com"));
message.Subject = "testing " + DateTime.UtcNow;
message.Body = "The quick brown fox jumped over the lazy dogs.";
mailClient.Send(message);
}
}
}
在本地它发送电子邮件就好了。在 Azure 上,我得到了这个:
未处理的异常:System.Net.Mail.SmtpException:发送邮件失败。---> System.ComponentModel.Win32Exception: 请求的函数不受支持 在 System.Net.NTAuthentication.GetOutgoingBlob(字节 []incomingBlob,布尔 throwOnError,SecurityStatus & statusCode) 在 System.Net.NTAuthentication.GetOutgoingBlob(字符串传入Blob) 在 System.Net.Mail.SmtpNtlmAuthenticationModule.Authenticate(字符串质询,NetworkCredential 凭据,对象 sessionCookie,字符串 spn,ChannelBinding channelBindingToken) 在 System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpClient.Send(MailMessage 消息) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Mail.SmtpClient.Send(MailMessage 消息) 在 c:\development\ConsoleApplication1\ConsoleApplication1\Program.cs:line 39 中的 ConsoleApplication1.Program.Main()
我已经确认 Azure 机器可以通过 RDP 在 Azure 角色上运行 TCPing.exe 来访问邮件服务器上的端口 587。