German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)
Textnachrichten sind weltweit weit verbreitet - bis zu dem Punkt, an dem immer mehr Webanwendungen SMS integriert haben, um Benutzer über Ereignisse, Verkäufe oder Gutscheine direkt über ihre Mobilgeräte zu informieren.
In diesem Tutorial werden die Grundlagen des Versendens von Textnachrichten mit PHP behandelt.
Überblick
Das Senden einer SMS ist eigentlich ziemlich einfach.
Unten finden Sie ein vereinfachtes Diagramm,wie eine Nachricht von einer Webanwendung an ein drahtloses Gerät gesendet werden kann.



Wir werden das aufteilen - Stück für Stück:
- Die Nachricht wird mithilfe einer Webanwendung erstellt, die auf einem HTTP-Server gespeichert und ausgeführt und dann als E-Mail-Nachricht über das Internet ("die Cloud") gesendet wird.
- Die E-Mail wird von einem Short Message Service Gateway (SMS Gateway) empfangen, das die Nachricht von einer E-Mail-Nachricht in eine SMS-Nachricht konvertiert.
- Die SMS-Nachricht wird dann an ein SMSC (Short Message Service Center) übergeben, bei dem es sich um einen Server handelt, der Daten an bestimmte mobile Geräte weiterleitet.
- Die Nachricht wird schließlich über das drahtlose Netzwerk an den Empfänger übertragen.
Die meisten drahtlosen Netzwerke verfügen über ein SMS-Gateway, über das E-Mail-Nachrichten als Textnachrichten an ein mobiles Gerät gesendet werden können. Das ist schön, weil es aus Entwicklersicht im Allgemeinen kostenlos ist - es ist jedoch natürlich kein kostenloser Dienst für den Endbenutzer. Für den Empfänger der Nachricht fallen weiterhin Gebühren an, und per E-Mail gesendete Nachrichten werden als Nicht-Netzwerk-Textnachricht in Rechnung gestellt.
E-Mail an SMS
Um eine SMS per E-Mail zu senden, benötigen Sie im Allgemeinen nur zwei Dinge:
- Die Telefonnummer oder eindeutige Kennung des Mobilgeräts, das Sie erreichen möchten.
- Und der Domainname des drahtlosen Netzwerks (viele finden Sie in dieser Liste der E-Mail-Adressen an SMS-Adressen).
Die folgende Konvention kann für die meisten Fluggesellschaften befolgt werden:
phoneNumber@domainName.com
phoneNumber
ist die Telefonnummer des Mobilgeräts, an das die Nachricht gesendet werden soll, und domainName.com
ist die Adresse für das SMS-Gateway des Netzwerks.
Um einen Text an Mr. Example zu senden, können Sie einfach 3855550168@vtext.com zu einem beliebigen E-Mail-Client hinzufügen, eine Nachricht eingeben und auf Senden klicken. Dadurch wird eine Textnachricht an die Telefonnummer +1 (385) 555-0168 im Verizon Wireless Network gesendet.
Zum Beispiel sende ich mir mit Google Mail eine SMS.



Wenn mein Telefon die Nachricht empfängt, sollte es so aussehen:



Ziemlich cool!
mail
-Funktion von PHP
Gehen wir noch einen Schritt weiter. Über das SMS-Gateway können wir mithilfe der mail
-Funktion von PHP eine Textnachricht per E-Mail senden. Die mail
-Funktion hat folgende Signatur:
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )
Hier können Sie mehr darüber lesen.
-
$to
, um den oder die Empfänger der Nachricht zu definieren. Gültige Beispiele sind:- user@example.com
- user1@example.com, user2@example.com
- User <user@example.com>
- User1 <user1@example.com>, User2 <user2@example.com>
-
$subject
ist eher selbsterklärend; Es sollte eine Zeichenfolge sein, die das gewünschte Thema enthält. Für SMS ist jedoch kein Betreff erforderlich. -
$message
ist die zu übermittelnde Nachricht. Wie im PHP-Handbuch erwähnt, "sollte jede Zeile mit einem LF (\n) getrennt werden. Zeilen sollten nicht größer als 70 Zeichen sein."
Um die frühere Funktionalität zu replizieren, könnten wir den folgenden PHP-Code schreiben:
mail( '3855550168@vtext.com', '', 'Testing' );
Eine Probefahrt
Lassen Sie uns einen Test mit PHP durchführen, um sicherzustellen, dass alles korrekt eingerichtet ist und die E-mail
-Funktion tatsächlich eine Textnachricht sendet. Mit dem folgenden Code können wir ausführen:
<?php var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true) ?>
Wenn mein Telefon die Nachricht empfängt, sieht es so aus:



Wenn Sie eine Fehlermeldung erhalten, lesen Sie den Abschnitt zur Fehlerbehebung.
Wie Sie im obigen Bild sehen können, zeigt die Nachricht, dass es sich um Google Mail handelt. Dies liegt daran, dass ich alle meine ausgehenden Nachrichten von meinem lokalen Server über diesen Dienst weiterleite. Leider war es mir zum jetzigen Zeitpunkt nicht gelungen, den From
-Header so zu ändern, dass er eine alternative Adresse widerspiegelt. Es scheint, dass die E-Mail-Header entfernt und durch vom SMS-Gateway vorbereitete Header ersetzt werden. Wenn jemand eine Problemumgehung kennt, hinterlassen Sie bitte einen Kommentar und lassen Sie den Rest von uns wissen!
Benutzerfreundlichkeit hinzufügen
Das Markup
Lassen Sie uns diese Idee aufgreifen und eine Benutzeroberfläche darum wickeln. Zuerst richten wir ein einfaches Formular ein:
<!DOCTYPE html> <head> <meta charset="utf-8" /> </head> <body> <div id="container"> <h1>Sending SMS with PHP</h1> <form action="" method="post"> <ul> <li> <label for="phoneNumber">Phone Number</label> <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li> <li> <label for="carrier">Carrier</label> <input type="text" name="carrier" id="carrier" /> </li> <li> <label for="smsMessage">Message</label> <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea> </li> <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li> </ul> </form> </div> </body> </html>
Der Style
Als nächstes streuen wir etwas CSS ein:
body { margin: 0; padding: 3em 0; color: #fff; background: #0080d2; font-family: Georgia, Times New Roman, serif; } #container { width: 600px; background: #fff; color: #555; border: 3px solid #ccc; -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px; border-top: 3px solid #ddd; padding: 1em 2em; margin: 0 auto; -webkit-box-shadow: 3px 7px 5px #000; -moz-box-shadow: 3px 7px 5px #000; -ms-box-shadow: 3px 7px 5px #000; box-shadow: 3px 7px 5px #000; } ul { list-style: none; padding: 0; } ul > li { padding: 0.12em 1em } label { display: block; float: left; width: 130px; } input, textarea { font-family: Georgia, Serif; }
Dies gibt uns die folgende einfache Form:



Das Drehbuch
Der wichtigste Teil dazu ist das PHP-Skript. Wir werden jetzt diesen Code schreiben:
<?php if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) { if ( isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) && !empty( $_REQUEST['phoneNumber'] ) && !empty( $_REQUEST['carrier'] ) ) { $message = wordwrap( $_REQUEST['smsMessage'], 70 ); $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier']; $result = @mail( $to, '', $message ); print 'Message was sent to ' . $to; } else { print 'Not all information was submitted.'; } } ?> <!DOCTYPE html>
- Das Skript prüft zunächst, ob das Formular gesendet wurde.
- Wenn ja, wird überprüft, ob die Variablen
phoneNumber
,carrier
undsmsMessage
gesendet wurden. Dies ist nützlich, wenn die Seite möglicherweise mehr als ein Formular enthält. - Wenn
phoneNumber
,carrier
undsmsMessage
verfügbar sind undphoneNumber
undcarrier
nicht leer sind, können Sie versuchen, die Nachricht zu senden. - Das Nachrichtenargument in der
mail
-Funktion sollte pro Zeile 70 Zeichen lang sein. Mit derwordwrap
funktion können wir die Nachricht in 70 Zeichenblöcke zerlegen. -
phoneNumber
undcarrier
werden verkettet und die Nachricht wird über diemail
-Funktion gesendet. - Wenn Daten fehlen oder nicht validiert werden können, gibt das Skript einfach zurück. Es wurden nicht alle Informationen übermittelt.
- Schließlich gibt
mail
einen Booleschen Wert zurück, der angibt, ob er erfolgreich war oder nicht. Der Wert wird in$result
gespeichert, falls ich überprüfen musste, ob die Nachricht tatsächlich gesendet wurde.
Hinweis: Die mail
-Methode benachrichtigt nur, ob die Nachricht gesendet wurde oder nicht. Es bietet keine Möglichkeit zu überprüfen, ob die Nachricht erfolgreich vom Empfängerserver oder Postfach empfangen wurde.
Der endgültige Code
<?php if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) { if ( isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) && !empty( $_REQUEST['phoneNumber'] ) && !empty( $_REQUEST['carrier'] ) ) { $message = wordwrap( $_REQUEST['smsMessage'], 70 ); $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier']; $result = @mail( $to, '', $message ); print 'Message was sent to ' . $to; } else { print 'Not all information was submitted.'; } }
?> <!DOCTYPE html> <head> <meta charset="utf-8" /> <style> body { margin: 0; padding: 3em 0; color: #fff; background: #0080d2; font-family: Georgia, Times New Roman, serif; } #container { width: 600px; background: #fff; color: #555; border: 3px solid #ccc; -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; border-radius: 10px; border-top: 3px solid #ddd; padding: 1em 2em; margin: 0 auto; -webkit-box-shadow: 3px 7px 5px #000; -moz-box-shadow: 3px 7px 5px #000; -ms-box-shadow: 3px 7px 5px #000; box-shadow: 3px 7px 5px #000; } ul { list-style: none; padding: 0; } ul > li { padding: 0.12em 1em } label { display: block; float: left; width: 130px; } input, textarea { font-family: Georgia, Serif; } </style> </head> <body> <div id="container"> <h1>Sending SMS with PHP</h1> <form action="" method="post"> <ul> <li> <label for="phoneNumber">Phone Number</label> <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li> <li> <label for="carrier">Carrier</label> <input type="text" name="carrier" id="carrier" /> </li> <li> <label for="smsMessage">Message</label> <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea> </li> <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li> </ul> </form> </div> </body> </html>
Fehlerbehebung
Localhost-Fehler
Um die mail
-Funktion nutzen zu können, muss ein Mail-Server ausgeführt werden. Wenn Sie dies auf einem Webhost ausführen, sind Sie wahrscheinlich in Ordnung. Wenn Sie sich nicht sicher sind, empfehle ich Ihnen, mit einem Administrator zu sprechen. Dies gilt auch für Personalmaschinen. Also wenn du Fehler bekommst wie..
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\sms\mail-test.php
...müssen Sie einen Mailserver installieren und konfigurieren. Dies liegt außerhalb des Bereichs dieses Tutorials. Wenn Sie jedoch an Ihrem lokalen Computer arbeiten, kann dieses Problem möglicherweise durch einen Wechsel zu XAMPP behoben werden. Versuchen Sie alternativ, Mercury Mail neben WAMP, MAMP oder auf einem LAMP-System (oder SAMP oder OAMP usw.) zu installieren (das sind viele 'AMPs').
PHPMailer
Eine andere Option (die Methode, die ich bevorzuge) ist die Verwendung von PHPMailer. Im Folgenden finden Sie ein Beispiel für die Verwendung von PHPMailer, um eine Verbindung zum SMTP-Server von Google Mail herzustellen und die Nachricht zu senden.
Die Verwendung ist so einfach wie das Einfügen einer Klasse in Ihr Skript.
require 'class.phpmailer.php'; // Instantiate Class $mail = new PHPMailer(); // Set up SMTP $mail->IsSMTP(); // Sets up a SMTP connection $mail->SMTPDebug = 2; // This will print debugging info $mail->SMTPAuth = true; // Connection with the SMTP does require authorization $mail->SMTPSecure = "tls"; // Connect using a TLS connection $mail->Host = "smtp.gmail.com"; $mail->Port = 587; $mail->Encoding = '7bit'; // SMS uses 7-bit encoding // Authentication $mail->Username = "email.address@gmail.com"; // Login $mail->Password = "password"; // Password // Compose $mail->Subject = "Testing"; // Subject (which isn't required) $mail->Body = "Testing"; // Body of our message // Send To $mail->AddAddress( "##########@vtext.com" ); // Where to send it var_dump( $mail->send() ); // Send!
Dies sollte etwas in der Art ausdrucken:



Je nach Ihrer Situation kann es etwas länger dauern, bis die Verbindung hergestellt ist. Wenn Sie Google Mail verwenden möchten, hat Google Informationen zum Herstellen einer Verbindung bereitgestellt.
Abschluss
Es gibt eine Vielzahl von Methoden, um eine SMS über eine Webanwendung zu senden. Diese Methode ist wirklich für Messaging mit geringem Volumen (höchstwahrscheinlich weniger als 1.000 Textnachrichten pro Monat) und Entwickler gedacht, die ihre Füße nass machen möchten, ohne Geld auszugeben. Weitere Optionen sind:
- Verwenden eines SMS-Gateway-Anbieters
- Wenn Sie eine Google search durchführen, werden zahlreiche Optionen zurückgegeben.
- Die meisten SMS-Gateway-Anbieter enthalten eine API zum Senden von Nachrichten über eine Webanwendung.
- Normalerweise können Sie sich zu einem angemessenen Preis für den Service anmelden, vorausgesetzt, Sie planen, mindestens 1.000 SMS-Nachrichten pro Monat zu senden.
- Sie können eine Kurzwahlnummer mieten.
- Verwendung eines GSM-Modems
- Dies kann eine kostspielige und langsame Methode sein, da Sie ein Modem kaufen und einen Vertrag mit einem drahtlosen Netzwerk haben müssen
- Sie müssen auch den Befehlssatz AT (Hayes) verwenden.
- Verwenden Sie eine direkte Verbindung zu einem drahtlosen Netzwerk, was einige intensive Verhandlungen und eine Menge Geld erfordert.
Dieses Tutorial ist in keiner Weise eine umfassende Übersicht über das Senden von Tex-Nachrichten mit PHP. aber es sollte Ihnen den Einstieg erleichtern! Ich hoffe, dieses Tutorial hat Sie interessiert. Vielen Dank fürs Lesen!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly