如何使用Delphi代码发送短信
问题描述:
我已经使用Indy10.6.2组件进行了3次尝试,其中没有一个显示任何错误,但代码无法发送短信。请帮助我通过Delphi代码向我发送短信。如何使用Delphi代码发送短信
尝试1
const
URL = 'https://api.bulksmsgateway.in/send/? username=****&hash=****&sender=TXTLCL&numbers=9198........&message=HISUNDAR';
//URL = 'https://api.textlocal.in/send/? username=*****&hash=******&sender=TXTLCL&numbers=9198...&message=HISUNDAR';
ResponseSize = 1024;
var
hSession, hURL: HInternet;
Request: String;
ResponseLength: Cardinal;
begin
hSession := InternetOpen('TEST', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
Request := Format(URL, [Username,Password,Sender,Numbers,HttpEncode(Message1)]);
hURL := InternetOpenURL(hSession, PChar(Request), nil, 0,0,0);
try
SetLength(Result, ResponseSize);
InternetReadFile(hURL, PChar(Result), ResponseSize, ResponseLength);
SetLength(Result, ResponseLength);
finally
InternetCloseHandle(hURL)
end;
showmessage(result);
finally
InternetCloseHandle(hSession)
end
尝试2
var
http : TIdHTTP;
IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
http := TIdHTTP.Create(nil);
IdSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
Http.ReadTimeout := 30000;
Http.IOHandler := IdSSL;
IdSSL.SSLOptions.Method := sslvTLSv1;
Http.Request.BasicAuthentication := True;
// IdSSL.SSLOptions.Method := sslvTLSv1;
//IdSSL.SSLOptions.Method := sslvTLSv1;
// http.Get('https://www.smsgatewayhub.com/api/mt/SendSMS? APIKey=B215dPone0yVIJU2QDH&senderid=TESTIN&channel=2&DCS=0&flashsms=0&number= 9195.....&text=test message&route=1');
http.Get('http://login.bulksmsgateway.in/sendmessage.php? user=****&password=****&mobile=95661....&message=Good Morning&sender=PRAPUS&type=3 ');
finally
http.Free;
end;
尝试3
var
lHTTP: TIdHTTP;
lParamList: TStringList;
lResult: String;
IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
lParamList := TStringList.Create;
lParamList.Add('username=****');
lParamList.Add('password=****');
lParamList.Add('msgtext=Hello World');
lParamList.Add('originator=TestAccount');
lParamList.Add('phone=+9195....');
lParamList.Add('showDLR=0');
lParamList.Add('charset=0');
lParamList.Add('msgtype=');
lParamList.Add('provider=bulksmsgateway.in');
lHTTP := TIdHTTP.Create(nil);
try
lResult := lHTTP.Post('http://login.bulksmsgateway.in/sendmessage.php?', lParamList);
//WriteLn(lResult);
// Readln;
finally
FreeAndNil(lHTTP);
FreeAndNil(lParamList);
end;
答
您正在发出错误的参数来使用错误的HTTP方法错网址。根据Bulk SMS Gateway website上的代码示例,您需要使用具有正确URL和参数的HTTP POST
。请按照在线示例进行操作。
尝试一些更喜欢这个:
var
lHTTP: TIdHTTP;
lParamList: TStringList;
lResult: String;
IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
lParamList := TStringList.Create;
try
lParamList.Add('user=****');
lParamList.Add('password=****');
lParamList.Add('message=Hello World');
lParamList.Add('sender=TestAccount');
lParamList.Add('mobile=+9195....');
lParamList.Add('type=1'); // or 3
lHTTP := TIdHTTP.Create(nil);
try
// note: if you are using an up-to-date version of Indy,
// assigning the IOHandler is optional:
//
// http://www.indyproject.org/sockets/blogs/ChangeLog/20141222.aspx
//
lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
try
lResult := lHTTP.Post('https://www.bulksmsgateway.in/sendmessage.php', lParamList);
// WriteLn(lResult);
// Readln;
except
on E: Exception do begin
//WriteLn('Error: ', e.Message);
end;
end;
finally
FreeAndNil(lHTTP);
end;
finally
FreeAndNil(lParamList);
end;
end;
如果你想通过SMS Gateway Hub送,你必须使用HTTP GET
,或HTTP上的XML POST
的选择:
var
lHTTP: TIdHTTP;
lParamList, lResult: String;
IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
lParamList := Format('APIKey=%s&senderid=%s&channel=2&DCS=8&flashsms=0&number=%s&text=%s&route=1',
[
'****',
'TestAccount',
'9195....',
'Hello World'
]
);
lHTTP := TIdHTTP.Create(nil);
try
lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
try
lResult := lHTTP.Get('https://www.smsgatewayhub.com/api/mt/SendSMS?' + lParamList);
// WriteLn(lResult);
// Readln;
except
on E: Exception do begin
//WriteLn('Error: ', e.Message);
end;
end;
finally
FreeAndNil(lHTTP);
end;
end;
var
lHTTP: TIdHTTP;
lParamList: TStringStream;
lResult: String;
IdSSL : TIdSSLIOHandlerSocketOpenSSL;
begin
lParamList := TStringStream.Create(
'<SmsQueue>' +
'<Account>' +
'<User>****</User>' +
'<Password>****</Password>' +
'<SenderId>TestAccount</SenderId>' +
'<Channel>1</Channel>' +
'<DCS>0</DCS>' +
'<FlashSms>0</FlashSms>' +
'<Route>1</Route>' +
'</Account>' +
'<Messages>' +
'<Message>' +
'<Number>9195....</Number>' +
'<Text>Hello World</Text>' +
'</Message>' +
'</Messages>' +
'</SmsQueue>',
TEncoding.UTF8);
try
lHTTP := TIdHTTP.Create(nil);
try
lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
try
lHTTP.Request.ContentType := 'text/xml';
lHTTP.Request.Charset := 'utf-8';
lResult := lHTTP.Post('https://www.smsgatewayhub.com/RestAPI/MT.svc/mt', lParamList);
// WriteLn(lResult);
// Readln;
except
on E: Exception do begin
//WriteLn('Error: ', e.Message);
end;
end;
finally
FreeAndNil(lHTTP);
end;
finally
FreeAndNil(lParams);
end;
end;
上次代码中的第一个地方,删除'?'来自URL的字符。为获得进一步的帮助,我们需要查看某个流量嗅探器(例如,来自浏览器控制台)捕获的请求。 – Victoria
你做了什么调试。你说你有“尝试”的东西。你做了什么事? –
以前遇到过多种_online_解决方案时,我们发现最好的解决方案是使用USB连接的电话并连接到它的虚拟串行调制解调器。 [见这里](https://gist.github.com/stijnsanders/bf0e7014b5824720f50e2f25a8d6efaf)为例 –