Hoe SMS-berichten verzenden met PHP

Tekstberichten zijn over de hele wereld enorm verspreid - tot het punt waarop steeds meer webapplicaties SMS hebben geïntegreerd om gebruikers op de hoogte te brengen van evenementen, verkopen of kortingsbonnen via hun mobiele apparaten.

In deze zelfstudie behandelen we de basisprincipes van het verzenden van SMS-berichten met PHP.

Premium-optie

Voordat we ingaan op het stapsgewijze proces, wilt u wellicht kijken naar een kant-en-klare oplossing: SMS Sender, beschikbaar op Envato Market. Met dit PHP-script kun je:

  • maak en importeer contacten en groepen
  • verzend een enkele sms, of verzend bulk-sms naar een groep of meerdere groepen
  • verbinding maken met elke SMS-gateway met minimale configuratie
  • pas je sms of e-mail aan
  • voeg een link toe aan je sms en e-mail
  • en veel meer
SMS Sender op Envato Market

Als u de afzender van uw tekstberichten liever helemaal opnieuw samenstelt, kunt u het volgende doen.


Overzicht

Het verzenden van een sms-bericht is eigenlijk vrij eenvoudig.

Hieronder ziet u een vereenvoudigd diagram van hoe een bericht kan worden verzonden van een webtoepassing naar een draadloos apparaat.

We zullen dit stuk voor stuk opdelen: één stuk per keer:

  • Het bericht is samengesteld met behulp van een webtoepassing die wordt opgeslagen en uitgevoerd op een HTTP-server en vervolgens via internet ("de cloud") wordt verzonden als een e-mail bericht.
  • De e-mail wordt ontvangen door een Short Message Service Gateway (SMS Gateway), die het bericht converteert van een e-mailbericht naar een sms-bericht.
  • Het SMS-bericht wordt vervolgens overhandigd aan een Short Message Service Center (SMSC), een server die gegevens naar specifieke mobiele apparaten routeert.
  • Het bericht wordt uiteindelijk via het draadloze netwerk naar de ontvanger verzonden.

De meeste draadloze netwerken hebben een sms-gateway waarmee e-mailberichten als tekstberichten naar een mobiel apparaat kunnen worden verzonden. Dit is leuk, want vanuit het standpunt van een ontwikkelaar is het over het algemeen gratis, maar het is natuurlijk geen gratis service voor de eindgebruiker. Kosten zijn nog steeds van toepassing op de ontvanger van het bericht en berichten die via e-mail worden verzonden, worden gefactureerd als een sms-bericht zonder netwerk.


E-mail naar sms

Als u per e-mail een sms-bericht wilt verzenden, heeft u meestal slechts twee dingen nodig:

  • Het telefoonnummer of unieke ID van het mobiele apparaat dat u wilt bereiken.
  • En de domeinnaam van het draadloze netwerk (veel hiervan zijn te vinden in deze lijst met e-mailberichten naar sms-adressen)

De volgende overeenkomst kan voor de meeste providers worden gevolgd:

[email protected]

telefoonnummer is het telefoonnummer van het mobiele apparaat waarnaar het bericht moet worden verzonden, en domainName.com is het adres voor de SMS Gateway van het netwerk.

Om een ​​tekst naar Mr. Example te sturen, kunt u eenvoudig [email protected] toevoegen aan een e-mailclient, een bericht typen en op Verzenden drukken. Dit stuurt een sms-bericht naar telefoonnummer +1 (385) 555-0168 op het Verizon Wireless Network.

Ik stuur bijvoorbeeld een sms-bericht naar mezelf met Gmail.

Wanneer mijn telefoon het bericht ontvangt, ziet het er als volgt uit:

Best gaaf!


PHP mail Functie

Laten we een stap verder gaan. Via de SMS Gateway kunnen we via e-mail een sms sturen met behulp van PHP's mail functie. De mail functie heeft de volgende handtekening:

bool mail (string $ to, string $ subject, string $ message [, string $ additional_headers [, string $ additional_parameters]])

Je kunt hier meer over lezen.

  • $ om definieert de ontvanger of ontvangers van het bericht. Geldige voorbeelden zijn onder meer:
  • $ subject is nogal zelfverklarend; het zou een reeks moeten zijn die het gewenste onderwerp bevat. Echter, sms hebben niet nodig een vak.
  • $ message is het bericht dat moet worden afgeleverd. Zoals vermeld in de PHP-handleiding, "elke regel moet worden gescheiden door een LF (\ n) .Lijnen mogen niet groter zijn dan 70 tekens."

Om de eerdere functionaliteit te repliceren, kunnen we de volgende PHP-code schrijven:

mail ('[email protected]', ", 'Testen');

Een proefrit

Laten we een test uitvoeren met PHP om ervoor te zorgen dat alles correct is ingesteld en dat de mail functie stuurt in feite een sms-bericht. Met behulp van de volgende code kunnen we het volgende uitvoeren:

Wanneer mijn telefoon het bericht ontvangt, ziet het er zo uit:

Als u een foutmelding krijgt, raadpleegt u het gedeelte Problemen oplossen.

Zoals u in de bovenstaande afbeelding kunt zien, wordt in het bericht weergegeven dat dit afkomstig is van Gmail. Dit komt omdat ik al mijn uitgaande berichten van mijn lokale server via die service routeer. Helaas, vanaf dit schrijven, ben ik niet succesvol in het veranderen van de Van kop om een ​​alternatief adres weer te geven. Het lijkt erop dat de e-mailheaders zijn verwijderd en vervangen door headers die zijn voorbereid door de SMS-gateway. Als iemand weet van een oplossing, laat een reactie achter en laat de rest van ons weten!


Bruikbaarheid toevoegen

De markup

Laten we, met de basis uit de weg, dit idee nemen en een gebruikersinterface eromheen wikkelen. Eerst zullen we een eenvoudig formulier opstellen:

     

Sms verzenden met PHP

De stijl

Vervolgens sprenkelen we wat CSS:

body marge: 0; opvulling: 3em 0; kleur: #fff; achtergrond: # 0080d2; font-family: Georgia, Times New Roman, serif;  #container width: 600px; achtergrond: #fff; kleur: # 555; border: 3px solid #ccc; -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; grensradius: 10px; border-top: 3px solid #ddd; opvulling: 1em 2em; marge: 0 auto; -webkit-box-shadow: 3px 7px 5px # 000; -moz-box-shadow: 3px 7px 5px # 000; -ms-box-shadow: 3px 7px 5px # 000; vakschaduw: 3px 7px 5px # 000;  ul lijststijl: geen; opvulling: 0;  ul> li opvulling: 0.12em 1em label display: block; zweven: links; breedte: 130 px;  input, textarea font-family: Georgia, Serif; 

Dit geeft ons de volgende eenvoudige vorm:


Het script

Het belangrijkste onderdeel hiervan is het PHP-script. We zullen dat stukje code nu schrijven:

 
  • Het script controleert eerst of het formulier is verzonden.
  • Zo ja, dan controleert het of het telefoonnummer, carrier en smsMessage variabelen zijn verzonden. Dit is handig in het geval dat er meer dan één formulier op de pagina staat.
  • Als telefoonnummer, carrier en smsMessage zijn beschikbaar en telefoonnummer en carrier zijn niet leeg, het is goed om te proberen het bericht te verzenden.
  • Het berichtargument in de mail functie moet per regel 70 tekens lang zijn. We kunnen het bericht in 70 tekens delen met behulp van de wordwrap functie.
  • telefoonnummer en carrier worden samengevoegd en vervolgens wordt het bericht verzonden met behulp van de mail functie.
  • Als er gegevens ontbreken of het kan niet worden gevalideerd, keert het script eenvoudig terug Niet alle informatie is ingediend.
  • Tenslotte, mail geeft een boolean terug die aangeeft of het succesvol was of niet. De waarde wordt opgeslagen in $ result voor het geval ik moest controleren of het bericht inderdaad werd verzonden.

Notitie: De mail methode geeft alleen aan of het bericht is verzonden of niet. Het biedt geen manier om te controleren of het bericht met succes is ontvangen door de ontvangende server of mailbox.


De definitieve code

 
?>       

Sms verzenden met PHP


Probleemoplossen

Localhost-fout

Om de. Te gebruiken mail functie, moet u een e-mailserver laten draaien. Als u dit op een webhost uitvoert, bent u waarschijnlijk in orde. Maar als u niet zeker weet, raad ik aan om met een beheerder te praten. Dit geldt ook voor persoonlijke machines. Dus als je fouten krijgt zoals?

Waarschuwing: mail () [function.mail]: verbinding met mailserver kon niet gemaakt worden op "localhost" poort 25, verifieer je "SMTP" en "smtp_port" instelling in php.ini of gebruik ini_set () in C: \ wamp \ www \ sms \ mail-test.php

? u zult een mailserver moeten installeren en configureren. Dit valt buiten het bestek van deze zelfstudie. Als u echter op uw lokale computer aan het werken bent, kan het overschakelen naar iets als XAMPP dit probleem oplossen. Je kunt ook Mercury Mail installeren naast WAMP, MAMP of op een LAMP (of SAMP- of OAMP-systeem) (dat zijn veel 'AMP's').

PHPMailer

Een andere optie (wat de methode is die ik verkies) is om PHPMailer te gebruiken. Hieronder ziet u een voorbeeld van hoe u PHPMailer gebruikt om verbinding te maken met de SMTP-server van Gmail en het bericht te verzenden.

Het gebruiken ervan is net zo eenvoudig als het opnemen van een klasse in uw script.

vereisen 'class.phpmailer.php'; // Instantiate Class $ mail = nieuwe PHPMailer (); // Stel SMTP $ mail-> IsSMTP () in; // Stelt een SMTP-verbinding in $ mail-> SMTPDebug = 2; // Hiermee wordt foutopsporingsinformatie afgedrukt $ mail-> SMTPAuth = true; // Verbinding met de SMTP vereist autorisatie $ mail-> SMTPSecure = "tls"; // Verbinden via een TLS-verbinding $ mail-> Host = "smtp.gmail.com"; $ mail-> Poort = 587; $ mail-> Encoding = '7bit'; // SMS gebruikt 7-bit codering // Authentication $ mail-> Username = "[email protected]"; // Login $ mail-> Password = "wachtwoord"; // Wachtwoord // Compose $ mail-> Subject = "Testen"; // Onderwerp (wat niet vereist is) $ mail-> Body = "Testen"; // Tekst van ons bericht // Verzenden naar $ mail-> AddAddress ("##########@vtext.com"); // Waar naartoe te verzenden var_dump ($ mail-> send ()); // Sturen!

Dit zou iets moeten afdrukken in de trant van:

Afhankelijk van uw situatie kan het iets langer duren om de verbinding tot stand te brengen. Als u van plan bent Gmail te gebruiken, heeft Google informatie verstrekt over het verbinden.


Conclusie

Er zijn een groot aantal methoden om de taak van het verzenden van een sms via een webapplicatie te volbrengen. Deze methode is echt bedoeld voor berichten met een laag volume (hoogstwaarschijnlijk minder dan 1.000 sms-berichten per maand) en ontwikkelaars die hun voeten nat willen maken zonder geld op te nemen. Andere opties zijn:

  • Een SMS Gateway-provider gebruiken
    • Als u een Google-zoekopdracht uitvoert, krijgt u voldoende opties.
    • De meeste SMS-gatewayproviders bevatten een API voor het verzenden van berichten via een webtoepassing.
    • U kunt zich meestal aanmelden voor een redelijke prijs, ervan uitgaande dat u van plan bent om ten minste 1.000 sms-berichten per maand te verzenden.
    • U kunt een kort codenummer huren.
  • Gebruik een GSM-modem
    • Dit kan een kostbare en langzame manier zijn om dit te doen, aangezien je een modem moet kopen en een contract hebt met een draadloos netwerk
    • Je zult ook de commandoset AT (Hayes) moeten gebruiken.
  • Gebruik een directe verbinding met een draadloos netwerk, waarvoor u veel moet onderhandelen en heel veel geld nodig hebt.

Deze tutorial is op geen enkele manier een uitgebreide beoordeling van het verzenden van tex-berichten met PHP; maar het moet je op weg helpen! Ik hoop dat deze handleiding interessant voor je is geweest. Heel erg bedankt voor het lezen!

Als je nog steeds hulp nodig hebt bij dit of een ander PHP-probleem, neem dan contact op met een van de ervaren PHP-ontwikkelaars op Envato Studio.