C#SmtpClient发送失败:提供的参数无效
我试图使用Office365邮件服务器发送邮件,但一直遇到此问题/异常,无法解决。对此做了大量研究,但找不到任何类似问题的帖子:C#SmtpClient发送失败:提供的参数无效,c#,C#,我试图使用Office365邮件服务器发送邮件,但一直遇到此问题/异常,无法解决。对此做了大量研究,但找不到任何类似问题的帖子: System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.Sockets.SocketException: An invalid argument was supplied at System.Net.Sockets.Socket..ctor(AddressFamily addre
System.Net.Mail.SmtpException: Failure sending mail.
---> System.Net.Sockets.SocketException: An invalid argument was supplied
at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
at System.Net.ServicePoint.GetConnection(PooledStream PooledStream, Object owner, Boolean async, IPAddress& address, Socket& abortSocket, Socket& abortSocket6)
at System.Net.PooledStream.Activate(Object owningObject, Boolean async, GeneralAsyncDelegate asyncCallback)
at System.Net.ConnectionPool.GetConnection(Object owningObject, GeneralAsyncDelegate asyncCallback, Int32 creationTimeout)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at whatever.Main()
这是我的C代码(为了便于分析,我对其进行了简化):
使用Python和TLS(端口587)的类似Sendmail方法也可以工作,但此C#代码不起作用,因此我的电脑和Office365 SMTP服务器之间应该没有连接问题
非常感谢您的帮助。谢谢。根据,您的smtp地址似乎不正确
请更改:
SmtpClient client = new SmtpClient("outlook.office365.com");
致:
更多信息。此错误可能特定于您的计算机,因为您的代码在我们的计算机上使用我们的Office365帐户工作。可能在您的机器上,端口587已经在使用中。我们需要更多关于
SocketException
的详细信息
确定SocketException的详细信息
检查InnerException
错误代码/消息,如下所示:
try {
// perform the email sending routing
} catch (Exception ex) {
var inner = ex.InnerException as System.Net.Sockets.SocketException;
System.Console.WriteLine(inner.ErrorCode);
System.Console.WriteLine(inner.Message);
}
输出看起来像这样,但是(可能)有不同的错误代码和消息
10048
Only one usage of each socket address (protocol/network address/port)
is normally permitted
如果错误消息没有提供足够的信息,请将错误代码与匹配。这应该为解决问题提供必要的细节
有关这些故障排除步骤的更多详细信息
这是您收到的内部异常:
System.Net.Sockets.SocketException:提供的参数无效
调用此构造函数时发生了/正在发生:
System.Net.Sockets.Socket(
AddressFamily addressFamily,
SocketType socketType,
ProtocolType protocolType)
报告说:
如果此构造函数抛出SocketException,请使用SocketException.ErrorCode属性获取特定的错误代码。获取此代码后,请参阅MSDN库中的Windows Sockets版本2 API错误代码文档,以了解错误的详细说明
这就是我们在上述步骤中演示的方法
愿原力与你同在 这不是您的问题,但您应该调用
client.Dispose()
以正确关闭SMTP连接。另外,请尝试使用管理权限运行Visual Studio,然后再试一次。我们尝试了此方法,但效果良好:1<代码>telnet outlook.office365.com 5872<代码>ehlo。服务器响应包括250-STARTTLS
,因此服务器会公布它支持TLS。我们认为这可能是问题所在,但显然不是。请参阅@Ron and Shaun:不幸的是,我在我的电脑上没有管理权限。此外,我的电脑上没有安装Visual Studio,因此我实际上使用的是Windows 10 MS Framework 4.0的SmtpClient和任何当前可用的名称空间。坦白地说,我实际上是在使用csc.exe编译我的cs代码;-)。实际上,我已经尝试了client.Dispose()代码,但错误仍然是一样的。最后,在我的Python代码上(顺便说一句,outlook.office365.com是正确的smtp,我使用的smtp.office365.com也有相同的错误),starttls()被调用,后面是login()(continue),最后是sendmail()。在C#上,只有启用SSL,我不确定是否已建立登录,即使已定义凭据。至少说来令人沮丧。@CSY如果您还没有解决这个问题,我们添加了一个新的答案,可能会对SocketException有所帮助。在提出这个问题之前,我已经尝试过了(smtp.office365.com),但没有任何效果(相同的错误消息)。谢谢Shaun。我已经根据上面的异常代码重新执行了代码,返回的错误代码是10022。根据MSDN:“WSAEINVAL10022无效参数。提供了一些无效参数(例如,为setsockopt函数指定了无效级别)。在某些情况下,它还引用套接字的当前状态,例如,在未侦听的套接字上调用accept。”我相信套接字的当前状态应该是良好的,因为从Python执行可以完美地工作。如果你能给我提供关于setsockopt的线索,有可能吗?TIA@CSY恐怕我没有更多的信息给你。如果我处在您的位置,我会联系Microsoft支持。好消息:安装VS 2017社区版后,我能够让它正常工作。我想我毕竟需要VS…叹气。谢谢大家的帮助!嗯,很高兴认识@CSY。我想知道VS2017安装了什么使它工作。
10048
Only one usage of each socket address (protocol/network address/port)
is normally permitted
System.Net.Sockets.Socket(
AddressFamily addressFamily,
SocketType socketType,
ProtocolType protocolType)