Clickatell 无法发送 SMS - c# Winforms 应用程序
Clickatell Failing to send SMS - c# Winforms Application
过去几周我一直在使用 clickatell 服务,每天早上向多个手机号码发送短信,直到今天才出现问题:
System.Net.WebException:基础连接已关闭:发送时发生意外错误。 ---> System.IO.IOException: 身份验证失败,因为远程方已关闭传输流。
我试过从公司网络内部和外部发送,甚至尝试从移动数据连接发送,每次都得到相同的响应。
我查看了我的clickatell账户,信用还是很足的,集成切换'on'..
知道出了什么问题吗?
在 clickatell 没有回应之后,我进行了一些挖掘并找到了这个线程...
"The underlying connection was closed: An unexpected error occurred on a send." With SSL Certificate
因为我使用的是 .net 4,所以我尝试将这行代码添加到 Rest Class 我从 clickatell 获得...
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
添加此代码似乎使系统再次运行..
所以,如果您使用的是 .net4 和 REST api,这就是您需要的代码:
class Rest
{
//This takes the API Key and JSON array of data and posts it to the Message URL to send the SMS's
public static string Post(string Token, string json)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://platform.clickatell.com/messages");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Accept = "application/json";
httpWebRequest.PreAuthenticate = true;
httpWebRequest.Headers.Add("Authorization", Token);
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
return result;
}
}
}
希望这对其他人有帮助....
是的,SecurityProtocol 必须是传输层安全性 1.2(3072 是 Tls12 SecurityProtocolType 枚举值)。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
对于 .net 4.6,Microsoft 已经升级了对 ssl 的安全限制。
如果你想了解更多,请阅读:ServicePointManager o SslStream APIs in .net 4.6
抱歉,这篇文章是意大利文,我没找到英文版。
过去几周我一直在使用 clickatell 服务,每天早上向多个手机号码发送短信,直到今天才出现问题:
System.Net.WebException:基础连接已关闭:发送时发生意外错误。 ---> System.IO.IOException: 身份验证失败,因为远程方已关闭传输流。
我试过从公司网络内部和外部发送,甚至尝试从移动数据连接发送,每次都得到相同的响应。
我查看了我的clickatell账户,信用还是很足的,集成切换'on'..
知道出了什么问题吗?
在 clickatell 没有回应之后,我进行了一些挖掘并找到了这个线程...
"The underlying connection was closed: An unexpected error occurred on a send." With SSL Certificate
因为我使用的是 .net 4,所以我尝试将这行代码添加到 Rest Class 我从 clickatell 获得...
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
添加此代码似乎使系统再次运行..
所以,如果您使用的是 .net4 和 REST api,这就是您需要的代码:
class Rest
{
//This takes the API Key and JSON array of data and posts it to the Message URL to send the SMS's
public static string Post(string Token, string json)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://platform.clickatell.com/messages");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Accept = "application/json";
httpWebRequest.PreAuthenticate = true;
httpWebRequest.Headers.Add("Authorization", Token);
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
return result;
}
}
}
希望这对其他人有帮助....
是的,SecurityProtocol 必须是传输层安全性 1.2(3072 是 Tls12 SecurityProtocolType 枚举值)。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
对于 .net 4.6,Microsoft 已经升级了对 ssl 的安全限制。
如果你想了解更多,请阅读:ServicePointManager o SslStream APIs in .net 4.6
抱歉,这篇文章是意大利文,我没找到英文版。