如何使用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; 
+0

上次代码中的第一个地方,删除'?'来自URL的字符。为获得进一步的帮助,我们需要查看某个流量嗅探器(例如,来自浏览器控制台)捕获的请求。 – Victoria

+0

你做了什么调试。你说你有“尝试”的东西。你做了什么事? –

+0

以前遇到过多种_online_解决方案时,我们发现最好的解决方案是使用USB连接的电话并连接到它的虚拟串行调制解调器。 [见这里](https://gist.github.com/stijnsanders/bf0e7014b5824720f50e2f25a8d6efaf)为例 –

您正在发出错误的参数来使用错误的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;