无法使用SmtpClient发送邮件

问题描述 投票:0回答:3

我想使用SmtpClient类发送邮件,但它不起作用。 代码:

SmtpClient smtpClient = new SmtpClient();

smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(obMailSetting.UserName, obMailSetting.Password);

smtpClient.Host = obMailSetting.HostMail;
smtpClient.Port = obMailSetting.Port;
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.EnableSsl = obMailSetting.Connect_Security;//true
//smtpClient.UseDefaultCredentials = true;//It would work if i uncomment this line
smtpClient.Send(email);

它抛出异常:

SMTP 服务器需要安全连接,或者客户端未经过身份验证。服务器响应是:5.7.1 客户端未经过身份验证

我确定用户名和密码正确。我的代码有问题吗? 谢谢。

c# .net smtp
3个回答
1
投票

你可以试试这个:

 MailMessage mail = new MailMessage();
 mail.Subject = "Your Subject";
 mail.From = new MailAddress("senderMailAddress");
 mail.To.Add("ReceiverMailAddress");
 mail.Body = "Hello! your mail content goes here...";
 mail.IsBodyHtml = true;

 SmtpClient smtp = new SmtpClient("smtp.gmail.com", 587);
 smtp.EnableSsl = true;
 NetworkCredential netCre = 
                  new NetworkCredential("SenderMailAddress","SenderPassword" );
 smtp.Credentials = netCre;

 try
  {
     smtp.Send(mail);                
  }
  catch (Exception ex)
  {   
    // Handle exception here 
  }

你可以尝试这个
在 Exchange 管理控制台的“服务器配置”节点下,选择“集线器传输”和服务器名称。 在“接收连接器”窗格中,打开任一接收连接器(我的默认安装创建了 2 个),或者您可以仅为 TFS 创建一个新连接器(我也尝试过这一点并且有效)。 对于任何这些连接器,打开“属性”,然后在“权限组”选项卡上确保选择“匿名用户”(默认情况下不是)。

或者

您还可以通过初始化 SmtpClient 来尝试

this
,如下所示:

SmtpClient smtp = new SmtpClient("127.0.0.1");

1
投票

服务器会响应 5.7.1 客户端未经过身份验证,但前提是您未将

UseDefaultCredentials
设置为
true
。这表明您使用的
NetworkCredential
实际上是错误的。

用户名或密码错误或者您需要指定域?您可以使用另一个构造函数来指定域:

new NetworkCredential("MyUserName", "MyPassword", "MyDomain");

或者您指定的用户可能没有在 SMTP 服务器上发送邮件的必要权限,但我会期望另一个服务器响应。


0
投票

使用

NetworkCredential
时出现“客户端未经过身份验证”错误的一个原因是 SMTP 服务器没有任何与
SmtpClient
共同的身份验证方法。 (通过使用受支持的方法(例如
UseDefaultCredentials = true
NTLM
),可能会成功实现
GSSAPI
,但该方法不适用于所提供的凭据。)

例如,.NET 5 及更高版本中的

SmtpClient
支持
LOGIN
NTLM
GSSAPI
身份验证方法(请参阅
SmtpConnection.Auth.cs
)。 如果 SMTP 服务器支持
AUTH PLAIN
但不支持
AUTH LOGIN
,则可能会发生错误,因为服务器和
PLAIN
都不支持
LOGIN
SmtpClient
,从而导致客户端在未经身份验证的情况下尝试发送。

© www.soinside.com 2019 - 2024. All rights reserved.