Manual: How to send SMS via HTTP/HTTPS-request
- Parameters for text-SMS
- Statuscodes
- Receiving delivery reports
- Receiving replies
- Balance query
- Program examples
- Example code for sending SMS with PHP
- Example code for sending SMS with Perl
- Example code for sending SMS with ASP
- Example code for sending SMS with JSP (Java Server Pages)
- Example code for sending SMS with JAVA
- Example code for sending SMS with .Net
- Example code for sending SMS with C#
- Example code for sending SMS with C++
- Example code for sending SMS with Visual Basic / VBA
- Example code for sending SMS through Delphi
- Example code for sending SMS through command line
You can send an SMS by calling the URL in your browser or by submitting automatic HTTP-requests at the URL:
http://www.sms4.de/cgi-bin/sms_out.plThe following CGI-parameters are processed:
1.) Parameters for text-SMS
Parameter | Sample | Description |
---|---|---|
handynr (mandatory) | handynr=491743333333 | Destination number. Destinations outside Germany must be in international format with the according country code without leading + or 00. |
user (mandatory) | user=XYZ | Your SMS4.de username. |
pwd (mandatory) | pwd=XYZ | User´s password. |
kdnr (mandatory) | kdnr=XY12345 | Your SMS4.de customer ID. Get a free test account here |
text (mandatory) | text=test+a+German+umlaut+%F6 | Text of SMS, max. 160 characters (ISO-8859-1). |
tarif (optional) | tarif=1 | Possible tariff values are 1 or 7. For details see our Preisliste
(tariff list) (Default value is 1). |
absender (optional) | absender=Der-Peter | The originator (sender) for the SMS, supported only with tariff 1: 6 to 11 alphanumeric characters (no special chars) or 6 to 14 numerals. With SMS to German landline phones only numerals are allowed. Set the default originator at Einstellungen (settings). |
sendezeit (optional) | sendezeit=20240501354 | Sending Time. This example means: Send SMS on 01.05.2024 at 13:54. The format is YYYYMMDDHHMM. Year Month Day Hour Minute without spaces, with leading zeroes for values <10 and without seconds. 24 Hour format. |
v (optional) | v=1 | To request a unique id in the HTTP response please set v=1. You can use this Id e.g. for enquiries (corresponding to the Id in the CSV-Logfiles). |
guthaben (optional) | guthaben=1 | To request the current prepaid balance (Euro) in the HTTP response please set guthaben=1 (only for prepaid customers). |
replyto (optional) | reply_to@someone-else.de | Replies (tariff 7) and delivery reports (tariff 1 and 7) won´t be sent to the user´s email address but to the email given in REPLYTO. |
test (optional) | test=1 | test=1 indicates test mode. SMS will not be sent out or billed. |
Please substitute username, password and customer ID with your access data.
If you do not have access yet, please register here.
Sample request Text-SMS (GET)
The HTTP request must be URL-encoded. For
example don´t use Ä but %C4 etc.
You can see the complete list here: urlencode-chart.
There are appropriate functions for url encoding in PHP, Perl and most other programming languages.
In PHP you can use fopen(), in Perl module HTTP::Request (read more in examples).
The parameters can be submitted using GET or POST.
Statuscodes
If the request was delivered successfully to our gateway, you get the following HTTP response:
<smsout> <status>0</status> <statustext>SMS erfolgreich versendet</statustext> </smsout>or in extended format with v=1:
<smsout> <status>0</status> <statustext>SMS erfolgreich versendet</statustext> <smsid>123456789</smsid> </smsout>or with displayed account balance guthaben=1:
<smsout> <status>0</status> <statustext>SMS erfolgreich versendet</statustext> <guthaben>23.35</guthaben> </smsout>Defined statuscodes:
0 = SMS erfolgreich versendet 10 = Falsche Authentifzierung, Ungueltige Kombination User/Passwort/Kundennummer 11 = Falsche Authentifzierung, User fehlt 12 = Falsche Authentifzierung, Passwort fehlt 13 = Falsche Authentifzierung, Kundennr fehlt 20 = Handynummer fehlt 21 = Ungueltige Handynr 22 = Handynummer zu kurz 23 = Handynummer zu lang 25 = SMS Text fehlt 30 = Ungueltiger Tarif 31 = Ungueltige Kombination Tarif/Handynummer 40 = Test SMS aufgebraucht 41 = Guthaben aufgebraucht 42 = Monatslimit erreicht 51 = Ungueltige Absenderkennung 52 = Absenderkennung zu kurz 99 = Stoerung beim SMSCRead more in our FAQ (German): Wie kann ich den Statuscode der HTTP-Schnittstelle verarbeiten?
4.) Receiving delivery reports
Pull: Documentation Pull DLRs via https
Push: Documentation push DLR via https
5.) Receiving replies
see (German): Handbuch Antworten �ber HTTP Push
6.) Balance query
see (German): Handbuch Guthabenabfrage �ber http oder https-Request
7.) Program examples
Sample code for PHP:
<?php /* ================================================ Sample code for sending SMS via URL-request www.sms4.de ===================================================*/ $kdnr = "XY12345"; // Please substitute with your customer ID $pw = "8899"; // Please substitute with your password $user = "Andre"; // Please substitute with your username // originating number ( 6 to 11 chars oder 6 to 14 numbers ) // only with tariff 1 $absender="017488997766"; // number of destination, including country code and network $handynr = "491741234567"; $text = "This is a test with PHP"; // Text of SMS $tarif = 1; // tariff 1 supports originator-ID, delivery notifications and direct termination // build URL $url = "http://www.sms4.de/cgi-bin/sms_out.pl?" . "handynr=" . UrlEncode($handynr) . "&user=" . UrlEncode($user) . "&pwd=" . UrlEncode($pw) . "&kdnr=" . UrlEncode($kdnr) . "&text=" . UrlEncode($text) . "&tarif=" . UrlEncode($tarif) . "&absender=" . UrlEncode($absender) ; // echo $url; /* Call URL */ $message=""; if ( ($f = @fopen($url, "r"))) { $max_zeichen=256; $daten = fgets($f, $max_zeichen); while ($daten) { $message.= $daten; $daten = fgets($f, $max_zeichen); } } else { echo "Error: URL $url could not be retrieved."; /* If fopen() fails, check the configuration of your server. Option allow_url_fopen in php.ini must be set to TRUE. For more important hints about fopen see http://www.php.net/manual/de/wrappers.http.php */ } echo $message; ?>
Sample code for Perl:
#!/usr/bin/perl ############################################################# # Sample code for sending SMS via POST-Request # www.sms4.de ############################################################# # load Standard-CGI module use CGI; $kdnr= 'XY12345';# Please substitute with your customer ID $pw= '8899';# Please substitute with your password $user = 'Andre';# Please substitute with your username # originating number ( 6 to 11 chars oder 6 to 14 numbers ) # only with tariff 1 $absender = 'Der-Peter'; # number of destination, including country code and network $handynr = "491741234567"; $tarif = 1; # tariff 1 supports originator-ID, delivery notifications and direct termination $text = 'This is a test with Perl'; # Text of SMS # Call URL via POST use HTTP::Request::Common; use LWP::UserAgent; $ua = new LWP::UserAgent; $res = $ua->request( POST 'http://www.sms4.de/cgi-bin/sms_out.pl', [ handynr => $handynr, user => $user, pwd => $pw, kdnr => $kdnr, text => $text, tarif => $tarif, absender => $absender ] ); if ($res->is_error) { # HTTP error } my $output = new CGI; print $output->header(); # print response if ($res->is_success) { print $res->content; } else { die $res->status_line; }
Sample code for ASP:
<%@LANGUAGE="VBScript"%> <% ' Sample code for sending SMS via POST-Request ' www.sms4.de Dim xmlobj, url Dim kdnr Dim pw Dim user Dim absender Dim handynr Dim tarif Dim text kdnr = "XY12345" 'Please substitute with your customer ID pw = "8899" 'Please substitute with your password user = "Andre" 'Please substitute with your username 'originating number ( 6 to 11 chars oder 6 to 14 numbers ) 'only with tariff 1 absender = "Der-Peter" 'number of destination, including country code and network handynr="491741234567" tarif = 1 'tariff 1 supports originator-ID, delivery notifications and direct termination text = "This is a test with ASP" 'Text of SMS 'build URL url = "handynr=" & Server.URLEncode(handynr) url = url & "&user=" & Server.URLEncode(user) url = url & "&pwd=" & Server.URLEncode(pw) url = url & "&kdnr=" & Server.URLEncode(kdnr) url = url & "&text=" & Server.URLEncode(text) url = url & "&tarif=" & Server.URLEncode(tarif) url = url & "&absender=" & Server.URLEncode(absender) 'Call URL via POST set xmlobj = Server.CreateObject("Msxml2.ServerXMLHTTP") ' set xmlobj = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0") ' set xmlobj = Server.CreateObject("Microsoft.XMLHTTP") xmlobj.open "POST", "http://www.sms4.de/cgi-bin/sms_out.pl", false xmlobj.setRequestHeader "Content-type", "application/x-www-form-urlencoded" xmlobj.Send url 'Print response if (xmlobj.status <> 200 ) then ' HTTP error else Response.write(xmlobj.responseText) end if set xmlobj = nothing %>
Sample code for JSP:
<%@ page import="java.util.*" %> <%@ page import="java.net.*" %> <%@ page import="java.io.*" %> <% /* ======================================================== Sample code for sending SMS via POST-Request www.sms4.de ===========================================================*/ String kdnr = "XY12345"; // Please substitute with your customer ID String pw = "8899"; // Please substitute with your password String user = "Andre"; // Please substitute with your username // originating number ( 6 to 11 chars oder 6 to 14 numbers ) // only with tariff 1 String absender = "Der-Peter"; // number of destination, including country code and network String handynr = "491741234567"; String tarif = "1"; // tariff 1 supports originator-ID, delivery notifications and direct termination String text = "This is a test with JSP"; // Text of SMS // build URL String uri = "handynr=" + URLEncoder.encode(handynr); uri = uri + "&user=" + URLEncoder.encode(user); uri = uri + "&pwd=" + URLEncoder.encode(pw); uri = uri + "&kdnr=" + URLEncoder.encode(kdnr); uri = uri + "&text=" + URLEncoder.encode(text); uri = uri + "&tarif=" + URLEncoder.encode(tarif); uri = uri + "&absender=" + URLEncoder.encode(absender); // Call URL via POST try { URL http = new URL("http://www.sms4.de/cgi-bin/sms_out.pl"); try { URLConnection connect = http.openConnection(); connect.setDoOutput(true); connect.setRequestProperty("Content-Type","application/x-www-form-urlencoded"); PrintWriter output = new PrintWriter(connect.getOutputStream()); output.println(uri); output.close(); BufferedReader input = new BufferedReader(new InputStreamReader(connect.getInputStream())); String res = input.readLine(); input.close(); //Print response out.println(res); } catch (IOException ex) { //HTTP error out.println(ex); } } catch(MalformedURLException e) { out.println(e); } %>
Sample code for JAVA 6
Download SourceParameters: -a,--a Absenderkennung -d,--debug Debugmodus -h,--help Diese Hilfe anzeigen. -hnr,--handynummer Handynummer (Pflicht) -kdnr,--kundennummer Kundennummer (Pflicht) -pw,--passwort Passwort (Pflicht) -t,--tarif Tarif 1 or 7 -txt,--text Text der SMS (Pflicht). -u,--user User (Pflicht) Sample call: java SMS4 -hnr=491743333333 -u=XYZ -pw=XYZ -kdnr=XY12345 -txt="This is a text" -t=1
Sample code for Visual C# 2008
Download SourceParameters: -a,--a Absenderkennung -d,--d Debugmodus -h,--h Diese Hilfe anzeigen. -hnr,--hnr Handynummer (Pflicht) -kdnr,--kdnr Kundennummer (Pflicht) -pw,--pw Passwort (Pflicht) -t,--t Tarif 1-5 -txt,--txt Text der SMS (Pflicht). -u,--u User (Pflicht) Sample call: SMS4 -hnr=491743333333 -u=XYZ -pw=XYZ -kdnr=XY12345 -txt="This is a text" -t=1
Sample code for C++ 6.0
Download SourceParameters: User Password CustomerID Mobileno "Text" [Sender] [Tariff] Sample call: SMS4 XYZ XYZ XY12345 491743333333 "This is a text" Peter 1
Sample code for Visual Basic
Download SourcePrivate Sub CommandButton1_Click() Dim res ' Call function SMS4: User, Password, CustomerID, Mobileno, Text, Sender, Tariff res = SMS4("XYZ", "XYZ", "XY12345", "491743333333", "This is a text", "Der-Peter", 1) MsgBox res End Sub
Sample code for command line
Call via Internet Explorer, reads Proxy-Settings. This way you can send out of corporate networks:"C:\Program Files\Internet Explorer\iexplore.exe" -extoff -private "https://www.sms4.de/cgi-bin/sms_out.pl?handynr=49174123456&user=abc&pwd=123=kdnr=abca&text=Dies+ist+ein+Text&tarif=1&absender=itsme"Close window
taskkill /f /im iexplore.exewith Wget:
wget -q -O - "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=This+is+a+text&tarif=1" or via POST-Request: wget -q -O - --post-data "handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=This+is+a+text&tarif=1" http://www.sms4.de/cgi-bin/sms_out.plwith Lynx:
lynx -source "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=This+is+a+text&tarif=1"with cURL:
curl "http://www.sms4.de/cgi-bin/sms_out.pl?handynr=491743333333&user=XYZ&pwd=XYZ&kdnr=XY12345&text=This+is+a+text&tarif=1" or via POST-Request and SSL: curl -k --data-urlencode "handynr=491743333333" --data-urlencode "user=XYZ" --data-urlencode "pwd=XYZ" --data-urlencode "kdnr=XY12345" --data-urlencode "text=This is a text via SSL" https://www.sms4.de/cgi-bin/sms_out.plmit .Net:
namespace HttpClientSample { class Program { static void Main(string[] args) { // GetRequest("someurl"); PostRequest("https://www.sms4.de/cgi-bin/sms_xml.pl"); Console.ReadKey(); } async static void PostRequest(string url) { string strxml = @"<httptosms> <user>xxx</user> <pwd>yyy</pwd> <custid>zzz</custid> <job> <msg>Test XML SMS4 .net.</msg> <tariff>1</tariff> <sender>MeinName</sender> <sms> <to>017400000</to> </sms> </job> </httptosms> " ; Console.WriteLine(strxml); Console.WriteLine(); IEnumerable<KeyValuePair<string, string>> queries = new List<KeyValuePair<string, string>>() { new KeyValuePair<string, string>("xml", strxml) }; HttpContent q = new FormUrlEncodedContent(queries); using (HttpClient client = new HttpClient()) { using (HttpResponseMessage response = await client.PostAsync(url,q)) { using (HttpContent content = response.Content) { String mycontent = await content.ReadAsStringAsync(); Console.WriteLine(mycontent); } } } } async static void GetRequest(string url) { using (HttpClient client = new HttpClient()) { using (HttpResponseMessage response = await client.GetAsync(url)) { using(HttpContent content = response.Content) { string mycontent = await content.ReadAsStringAsync(); Console.WriteLine(mycontent); } } } } } }