Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#SmtpClient发送失败:提供的参数无效_C# - Fatal编程技术网

C#SmtpClient发送失败:提供的参数无效

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

我试图使用Office365邮件服务器发送邮件,但一直遇到此问题/异常,无法解决。对此做了大量研究,但找不到任何类似问题的帖子:

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)