Enviar un mensaje es muy sencillo, solamente hay que hacer una petición http, usando el método "POST" para pasar los parámetros (número de teléfono, usuario, contraseña, texto del mensaje, etc ...)
El siguiente ejemplo es una aplicación de consola que permite enviar SMS desde la linea de comandos:
delphi
program SendSMS; {$APPTYPE CONSOLE} uses Windows, SysUtils, Classes, WinInet; function URLEncode(Str: string): string; var i: integer; begin Result:= ''; for i:= 1 to Length(Str) do if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then Result:= Result + Str[ i ] else Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2); end; function SendRequest(Host, Path: String; Port: Word; Stream: TStream; Request: String): String; var hNet: HINTERNET; hCon: HINTERNET; hReq: HINTERNET; Context: DWORD; BytesRead: DWORD; Success: Boolean; Buffer: PChar; begin Context:= 0; hNet := InternetOpen('Agente', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if (hNet <> nil) then begin hCon:= InternetConnect(hNet,PChar(Host),Port,nil,nil, INTERNET_SERVICE_HTTP,0,Context); if (hCon <> nil) then begin hReq:= HttpOpenRequest(hCon,'POST',PChar(Path),nil,nil,nil, INTERNET_FLAG_RELOAD,Context); if (hReq <> nil) then begin Success:= HttpSendRequest(hReq, 'Content-Type: application/x-www-form-urlencoded',Cardinal(-1), PChar(Request),Length(Request)); if Success then begin GetMem(Buffer,32*1024); try while (InternetReadFile(hReq,Buffer,32*1024,BytesRead)) do begin if (BytesRead = 0) then break; Stream.Write(Buffer^,BytesRead) end; finally FreeMem(Buffer); end; end; InternetCloseHandle(hReq); end; InternetCloseHandle(hCon); end; InternetCloseHandle(hNet); end; end; function SendMsg(Numbers, Text, Username, Password: String): String; var Request: String; Stream: TStringStream; begin Result:= EmptyStr; Request:= Format('username=%s&password=%s&message=%s&msisdn=%s',[ UrlEncode(Username), UrlEncode(Password), UrlEncode(Text), UrlEncode(Numbers)]); Stream:= TStringStream.Create(EmptyStr); try SendRequest('bulksms.com.es','/eapi/submission/send_sms/2/2.0',5567,Stream, Request); Result:= Trim(Stream.DataString); finally Stream.Free; end; end; procedure Vamos; var i: Integer; Numero: int64; Mensaje: String; begin if ParamCount > 1 then if TryStrToInt64(ParamStr(1),Numero) then begin Mensaje:= EmptyStr; for i:= 2 to ParamCount do Mensaje:= Mensaje + ParamStr(i) + #13#10; Writeln('Enviando emnsaje ...'); Writeln(SendMsg(IntToStr(Numero),Trim(Mensaje),'Usuario','Password')); end; end; begin Writeln; Vamos; Writeln; end.
Donde "Usuario" y "Password" son con los que te diste de alta en la pagina web de bulksms ... los míos mejor no los publico
Un ejemplo de como usarlo:
delphi
SendSMS 34668832843 "Primera Linea" "Segunda Linea de Texto" "Ultima Linea"
Por ultimo remarcar que no tengo nada que ver con esta compañía, y no le estoy haciendo publicidad, auque si alguno le parece mal se borra el mensaje y tan amigos
PD: Al darse de alta te regalan los 5 primeros mensajes (por si queréis hacer pruebas)
PD2: El numero de teléfono de ejemplo es MI numero de fonyou, por si alguno quiere mandarme un mensaje