Så skickar du textmeddelanden med PHP

Textmeddelanden har blivit extremt utbrett i hela världen - till det ställe där ett ökat antal webbapplikationer har integrerat SMS för att meddela användare av händelser, försäljning eller kuponger direkt via sina mobila enheter.

I denna handledning kommer vi att täcka grunden för att skicka textmeddelanden med PHP.

Premium alternativ

Innan vi går in i steg-för-steg-processen kanske du vill titta på en färdig lösning: SMS-avsändare, tillgänglig på Envato Market. Detta PHP-skript låter dig:

  • Skapa och importera kontakter och grupper
  • skicka ett SMS, eller skicka bulk SMS till en grupp eller flera grupper
  • Anslut till någon SMS-gateway med minimal konfiguration
  • Anpassa ditt SMS eller e-postmeddelande
  • Lägg till en länk till ditt SMS och e-postmeddelande
  • och mycket mera
SMS-avsändare på Envato Market

Om du föredrar att bygga din textmeddelandesändare från början, så gör du det här.


Översikt

Att skicka ett SMS-meddelande är faktiskt ganska enkelt.

Nedan följer ett förenklat diagram över hur ett meddelande kan skickas från en webbapplikation till en trådlös enhet.

Vi bryter ner det här - en bit i taget:

  • Meddelandet består av en webbapplikation som lagras och exekveras på en HTTP-server och skickas sedan via internet ("molnet") som ett e-post meddelande.
  • E-postmeddelandet mottas av en SMS-gateway (Short Message Service Gateway), som konverterar meddelandet från ett e-postmeddelande till ett SMS-meddelande.
  • SMS-meddelandet överlämnas sedan till ett SMSC (Short Message Service Center), vilket är en server som ruter data till specifika mobila enheter.
  • Meddelandet överförs slutligen över det trådlösa nätverket till mottagaren.

De flesta trådlösa nätverk har en SMS-gateway genom vilken e-postmeddelanden kan skickas som textmeddelanden till en mobilenhet. Det här är trevligt, för det är från en utvecklare synvinkel generellt gratis, men det är förstås inte en gratis tjänst för slutanvändaren. Avgifter gäller fortfarande för mottagaren av meddelandet och meddelanden som skickas via e-post faktureras som ett icke-nätverksmeddelande.


E-post till SMS

För att skicka ett SMS via e-post behöver du i allmänhet bara två saker:

  • Telefonnumret eller den unika identifieraren för den mobila enheten du vill nå.
  • Och det trådlösa nätverks domännamn (många finns i denna lista med e-post till SMS-adresser)

Följande konvention kan följas för de flesta bärare:

[email protected]

telefonnummer är mobilenhetens telefonnummer att skicka meddelandet till, och domainName.com är adressen till nätets SMS Gateway.

För att skicka en text till Mr Example kan du helt enkelt lägga till [email protected] till någon e-postklient, skriv ett meddelande och tryck på Skicka. Detta skickar ett textmeddelande till telefonnummer +1 (385) 555-0168 på Verizon Wireless Network.

Till exempel skickar jag ett textmeddelande till mig själv med hjälp av Gmail.

När min telefon tar emot meddelandet ska det se ut så här:

Ganska häftigt!


PHP post Fungera

Låt oss ta saker ett steg längre. Med hjälp av SMS Gateway kan vi skicka ett SMS via e-post med PHP post fungera. De post funktionen har följande signatur:

bool post (sträng $ till, sträng $ ämne, sträng $ meddelande [, sträng $ additional_headers [, sträng $ additional_parameters]])

Du kan läsa mer om det här.

  • $ till definierar mottagaren eller mottagarna av meddelandet. Giltiga exempel inkluderar:
  • $ ämne är ganska självförklarande; Det ska vara en sträng som innehåller det önskade ämnet. Men SMS kräver inte ett ämne.
  • $ message är meddelandet som ska levereras. Som nämnts i PHP-handboken ska "varje rad separeras med en LF (\ n). Linjerna får inte vara större än 70 tecken."

För att replikera den tidigare funktionaliteten kunde vi skriva följande PHP-kod:

post ('[email protected]', ',' Testing ');

En provkörning

Låt oss köra ett test med PHP för att se till att allt är korrekt inställt och att post funktionen skickar faktiskt ett textmeddelande. Med följande kod kan vi köra:

När min telefon tar emot meddelandet ser det ut så här:

Om du får ett fel, se felsökningssektionen.

Som du kan se i bilden ovan visar meddelandet att det kommer från Gmail. Detta beror på att jag rutter alla mina utgående meddelanden från min lokala server genom den tjänsten. Tyvärr har jag, med detta skrivande, misslyckats med att ändra Från rubrik för att reflektera en alternativ adress. Det verkar som om e-postrubrikerna är avtagna och ersatta med rubriker som utarbetats av SMS-gatewayen. Om någon vet om en lösning, vänligen lämna en kommentar och låt oss få veta!


Lägger till användbarhet

Markup

Med grunderna ur vägen, låt oss ta den här idén och lägga in ett användargränssnitt runt det. Först ska vi skapa en enkel form:

     

Skickar SMS med PHP

Stilen

Nästa strömmar vi i några CSS:

kropp marginal: 0; vaddering: 3em 0; färg: #fff; bakgrund: # 0080d2; font-family: Georgia, Times New Roman, serif;  #container width: 600px; bakgrund: #fff; färg: # 555; gräns: 3px solid #ccc; -webkit-gräns-radie: 10px; -moz-gränsen-radien: 10px; -ms-gränsen-radien: 10px; gränsstråle: 10px; border-top: 3px solid #ddd; vaddering: 1em 2em; marginal: 0 auto; -webkit-box-skugga: 3px 7px 5px # 000; -moz-box-skugga: 3px 7px 5px # 000; -mask-skugga: 3px 7px 5px # 000; boxskugga: 3px 7px 5px # 000;  ul listestil: none; vaddering: 0;  ul> li vaddering: 0.12em 1em etikett display: block; flyta till vänster; bredd: 130px;  inmatning, textarea font-family: Georgia, Serif; 

Detta ger oss följande enkla formulär:


Manuset

Den viktigaste delen till detta är PHP-skriptet. Vi skriver så lite kod nu:

 
  • Skriptet kontrollerar först för att se om formuläret har skickats in.
  • Om ja, kontrollerar den att se om telefonnummer, bärare och smsMessage variabler skickades. Detta är användbart om det kan finnas mer än en blankett på sidan.
  • Om telefonnummer, bärare och smsMessage är tillgängliga och telefonnummer och bärare är inte tomma, det är okej att försöka skicka meddelandet.
  • Meddelandet argumentet i post funktionen ska vara 70 tecken längd per rad. Vi kan hugga meddelandet i 70 teckenbitar med hjälp av wordwrap fungera.
  • telefonnummer och bärare sammankopplas och sedan skickas meddelandet med post fungera.
  • Om data saknas eller det inte kan valideras, returneras skriptet helt enkelt Inte all information lämnades in.
  • Till sist, post returnerar en booleska som anger om det lyckades eller inte. Värdet lagras i $ result om jag behövde kontrollera att meddelandet faktiskt skickades.

Notera: De post Metoden meddelar endast om meddelandet har skickats eller inte. Det ger inget sätt att kontrollera om meddelandet har mottagits av mottagarservern eller brevlådan.


Slutkoden

 
?>       

Skickar SMS med PHP


Felsökning

Localhost Error

För att kunna använda post funktion måste du ha en mail server som körs. Om du kör det här på en webbhotell är du nog okej. Men om du är osäker rekommenderar jag att du pratar med en administratör. Detta gäller även för personliga maskiner. Så om du får fel som?

Varning: mail () [function.mail]: Misslyckades att ansluta till mailserver på porten "localhost" 25, verifiera din "SMTP" och "smtp_port" -inställning i php.ini eller använd ini_set () i C: \ wamp \ www \ sms \ post-test.php

? du måste installera och konfigurera en mailserver. Detta handlar inte om denna handledning. Men om du arbetar på din lokala maskin kan det hända att byta till något som XAMPP lösa detta problem. Alternativt kan du prova att installera Mercury Mail tillsammans med WAMP, MAMP eller på ett LAMP (eller SAMP eller OAMP, etc.) system (det är många AMPs).

PHPMailer

Ett annat alternativ (vilket är den metod jag föredrar) är att använda PHPMailer. Nedan följer ett exempel på hur man använder PHPMailer för att ansluta till Gmails SMTP-server och skicka meddelandet.

Att använda det är lika enkelt som att inkludera en klass i ditt skript.

kräver 'class.phpmailer.php'; // Instantiate Class $ mail = ny PHPMailer (); // Ställ in SMTP $ mail-> IsSMTP (); // Sätter upp en SMTP-anslutning $ mail-> SMTPDebug = 2; // Detta kommer att skriva ut felsökning info $ mail-> SMTPAuth = true; // Anslutning med SMTP kräver inte behörighet $ mail-> SMTPSecure = "tls"; // Anslut med en TLS-anslutning $ mail-> Host = "smtp.gmail.com"; $ mail-> Port = 587; $ mail-> Encoding = '7bit'; // SMS använder 7-bitars kodning // Autentisering $ mail-> Användarnamn = "[email protected]"; // Logga in $ mail-> Password = "password"; // Lösenord // Komponera $ mail-> Subject = "Testing"; // Ämne (som inte krävs) $ mail-> Body = "Testing"; // Kropp i vårt meddelande // Skicka till $ mail-> AddAddress ("###########vt"); // Var att skicka det var_dump ($ mail-> send ()); // Skicka!

Detta bör skriva ut något enligt följande:

Det kan ta lite mer att konfigurera anslutningen beroende på din situation. Om du planerar att använda Gmail har Google lämnat information om anslutning.


Slutsats

Det finns en mängd metoder för att uppnå uppgiften att skicka ett SMS via en webbapplikation. Denna metod är egentligen avsedd för lågvolymmeddelanden (sannolikt mindre än 1000 textmeddelanden per månad) och utvecklare som vill få sina fötter blötta utan att förklara pengar. Andra alternativ inkluderar:

  • Använda en SMS Gateway Provider
    • Om du gör en Google-sökning kommer många alternativ att returneras.
    • De flesta SMS-gatewayleverantörer inkluderar ett API för att skicka meddelanden via en webbapplikation.
    • Du kan vanligtvis anmäla dig till service till ett rimligt pris, förutsatt att du planerar att skicka minst 1000 SMS-meddelanden per månad.
    • Du kan hyra ett kortnummer.
  • Använda ett GSM-modem
    • Det kan vara ett dyrt och långsamt sätt att göra det, eftersom du måste köpa ett modem och ha ett kontrakt med ett trådlöst nätverk
    • Du måste också använda kommandot AT (Hayes).
  • Använd en direktanslutning till ett trådlöst nätverk, vilket kräver en del starka förhandlingar och en hel del pengar.

Denna handledning är inte på något sätt en omfattande översyn av att skicka texmeddelanden med PHP; men det borde få dig igång! Jag hoppas att denna handledning har varit av intresse för dig. Tack så mycket för att läsa!

Om du fortfarande behöver hjälp med detta eller någon annan PHP-fråga, försök kontakta en av de erfarna PHP-utvecklarna på Envato Studio.