C#SMTP无法在Outlook.com,端口587上进行身份validation。“服务器响应为:5.7.1客户端未通过身份validation”
我正在尝试发送自动电子邮件(真正需要的商业原因 – 不是垃圾邮件!)。 类似于下面的代码用于与另一个邮件服务提供商合作,但客户已转移到“outlook.com”,他们现在得到:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated
当然这个(C#)代码应该工作:
private void Send_Click(object sender, EventArgs e) { MailMessage message = null; try { message = new MailMessage(From, To); message.Subject = "Update Request Session from " + From; message.CC.Add(Cc); message.Body = "Test message: please ignore."; message.IsBodyHtml = false; SmtpClient client = new SmtpClient("smtp.outlook.com", 587); client.Credentials = new System.Net.NetworkCredential(From, Password); client.UseDefaultCredentials = false; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.Send(message); } catch (Exception ex) { Status.Text = ex.Message; } if (message != null) { message.Dispose(); } }
请注意,正在设置DeliveryMethod和EnableSsl,端口为587。
我在我的Outlook客户端(桌面程序,而不是Web服务)上创建了另一个测试帐户,以测试上面代码使用的参数:
- 用户名
- 密码
- smtp.outlook.com
- 587
- TLS
并且Outlook中的“测试帐户设置”显示参数正确(“任务:发送测试电子邮件 – 状态:已完成”)。 所以我认为用户名和密码必须正确。
我已按照此处所述开启了详细登录: http : //social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/28b5a576-0da2-42c9-8de3-f2bd1f30ded4/ 。 这产生了大量的输出,太多了,无法在此发布。 以下是最后几行:
System.Net Information: 0 : [6312] SecureChannel#28756230 - Remote certificate was verified as valid by the user. System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Send() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Send System.Net.Sockets Verbose: 0 : [6312] 00000000 : 17 03 01 00 30 4B BC 72-D3 A8 D7 EC FB 3C 21 0F : ....0K.r..... 53#53 System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Receive() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Receive System.Net.Sockets Verbose: 0 : [6312] 00000000 : 17 03 01 00 D0 : ..... System.Net.Sockets Verbose: 0 : [6312] Exiting Socket#59109011::Receive() -> 5#5 System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Receive() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Receive System.Net.Sockets Verbose: 0 : [6312] 00000005 : 4D 6F 22 3C B8 A4 39 14-B0 FC B9 58 23 9A 26 70 : Mo"<..9....X#.&p System.Net.Sockets Verbose: 0 : [6312] 00000015 : 89 52 B4 E1 8D 74 D6 23-5C 2B 7C 44 6E EB 1A F7 : .R...t.#\+|Dn... System.Net.Sockets Verbose: 0 : [6312] 00000025 : 7A 56 3D 18 0E 93 9C C5-C6 43 28 25 AA 3D DF 89 : zV=......C(%.=.. System.Net.Sockets Verbose: 0 : [6312] 00000035 : 46 78 9B 69 ED FA 51 65-29 D9 DF A6 3F 9F 9F 25 : Fx.i..Qe)...?..% System.Net.Sockets Verbose: 0 : [6312] 00000045 : 22 18 99 13 6A AA FB 49-BE 9C 53 F2 96 3C 5A 5A : "...j..I..S.. 208#208 System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Send() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Send System.Net.Sockets Verbose: 0 : [6312] 00000000 : 17 03 01 00 40 45 FD 20-1F 27 A1 B3 50 A3 99 5D : ....@E. .'..P..] System.Net.Sockets Verbose: 0 : [6312] 00000010 : F3 DA 03 7E 47 C4 8C 91-21 7F 25 7C 09 CC E4 68 : ...~G...!.%|...h System.Net.Sockets Verbose: 0 : [6312] 00000020 : 27 95 BE C7 FB 9E BC 65-67 64 CE C7 BE 4A BB 48 : '......egd...JH System.Net.Sockets Verbose: 0 : [6312] 00000030 : 89 36 A4 A4 90 B4 7B B4-C0 B5 DB 5B 18 3F 4A C3 : .6....{....[.?J. System.Net.Sockets Verbose: 0 : [6312] 00000040 : A2 DB 51 B5 46 : ..QF System.Net.Sockets Verbose: 0 : [6312] Exiting Socket#59109011::Send() -> 69#69 System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Receive() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Receive System.Net.Sockets Verbose: 0 : [6312] 00000000 : 17 03 01 00 40 : ....@ System.Net.Sockets Verbose: 0 : [6312] Exiting Socket#59109011::Receive() -> 5#5 System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Receive() System.Net.Sockets Verbose: 0 : [6312] Data from Socket#59109011::Receive System.Net.Sockets Verbose: 0 : [6312] 00000005 : 43 8E E7 44 71 B3 84 BC-5F 08 39 CE B1 3A A4 F9 : C..Dq..._.9..:.. System.Net.Sockets Verbose: 0 : [6312] 00000015 : F4 92 BE B3 D7 10 81 14-B9 5B BA E3 35 93 34 12 : .........[..5.4. System.Net.Sockets Verbose: 0 : [6312] 00000025 : AF 32 F1 69 82 BD B9 8B-4C 2F 47 5F 8B 95 7E 52 : .2.i....L/G_..~R System.Net.Sockets Verbose: 0 : [6312] 00000035 : 94 4C A6 79 6A F6 E2 84-D1 9E A5 D3 16 98 44 E1 : .L.yj.........D. System.Net.Sockets Verbose: 0 : [6312] Exiting Socket#59109011::Receive() -> 64#64 System.Net Error: 0 : [6312] Exception in the SmtpClient#44419000::Send - The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.1 Client was not authenticated System.Net Error: 0 : [6312] at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response) at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, String from) at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception) at System.Net.Mail.SmtpClient.Send(MailMessage message) System.Net.Sockets Verbose: 0 : [6312] Socket#59109011::Dispose() System.Net Verbose: 0 : [6312] Exiting SmtpClient#44419000::Send()
第一条线告诉我,SmtpClient和outlook.com已就使用的加密协议达成一致,但其余部分对我来说意味着“5.7.1客户端未经过身份validation”这一行。
有没有人遇到连接到Outlook.com的类似问题?
提前致谢。
罗斯
我知道这听起来很奇怪,但AFAI记得在设置Credentials
之前应该使用UseDefaultCredentials = false
。 将您的代码更改为:
client.UseDefaultCredentials = false; client.Credentials = new System.Net.NetworkCredential(From, Password);
评论出UseDefaultCredentials对我有用,请参阅Microsoft Bug: https : //connect.microsoft.com/VisualStudio/feedback/details/725279/smtp-tls-authentication-usedefaultcredentials-bug-using-office365-server-as-smart-host
如果已为Microsoft帐户启用了两步validation,请确保使用应用程序密码 (可在此处创建)。