Slik sender du tekstmeldinger med PHP

Tekstmeldinger har blitt ekstremt utbredt over hele verden - til det punktet hvor et økende antall webprogrammer har integrert SMS for å varsle brukere av hendelser, salg eller kuponger direkte gjennom sine mobile enheter.

I denne opplæringen vil vi dekke grunnleggende for å sende tekstmeldinger med PHP.

Premium-alternativ

Før vi går inn i trinn-for-trinn-prosessen, vil du kanskje se på en ferdig løsning: SMS Sender, tilgjengelig på Envato Market. Dette PHP-skriptet lar deg:

  • lag og importer kontakter og grupper
  • send en enkelt SMS, eller send bulk SMS til en gruppe eller flere grupper
  • Koble til hvilken som helst SMS-gateway med minimal konfigurasjon
  • Tilpass SMS eller e-post
  • Legg til en lenke til din SMS og e-post
  • og mye mer
SMS Sender på Envato Market

Hvis du foretrekker å bygge tekstmeldingssenderen fra grunnen av, kan du gjøre det her.


Oversikt

Sende en SMS-melding er faktisk ganske enkelt.

Nedenfor er et forenklet diagram over hvordan en melding kan sendes fra et webprogram til en trådløs enhet.

Vi bryter dette ned - ett stykke av gangen:

  • Meldingen er sammensatt ved hjelp av et webprogram som er lagret og utført på en HTTP-server og deretter sendt via internett ("skyen") som en e-post budskap.
  • E-posten mottas av en SMS-gateway (Short Message Service Gateway), som konverterer meldingen fra en e-postmelding til en SMS-melding.
  • SMS-meldingen overføres deretter til et SMSC-kort, som er en server som ruter data til bestemte mobile enheter.
  • Meldingen sendes endelig over det trådløse nettverket til mottakeren.

De fleste trådløse nettverk har en SMS-gateway der e-postmeldinger kan sendes som tekstmeldinger til en mobilenhet. Dette er fint, for det er fra en utviklerens synspunkt generelt gratis, men det er selvfølgelig ikke en gratis tjeneste for sluttbrukeren. Gebyrer gjelder fortsatt for mottakeren av meldingen, og meldinger sendt via e-post vil bli fakturert som en ikke-tekstmeldingsmelding.


E-post til SMS

For å sende en SMS via e-post, trenger du vanligvis kun to ting:

  • Telefonnummeret eller den unike identifikatoren til mobilenheten du vil nå.
  • Og det trådløse nettverks domenenavn (mange finnes i denne listen med e-post til SMS-adresser)

Følgende konvensjon kan følges for de fleste bærere:

[email protected]

telefonnummer er telefonnummeret til mobilenheten for å sende meldingen til, og domainName.com er adressen til nettverks SMS Gateway.

For å sende en tekst til Mr. Eksempel, kan du ganske enkelt legge til [email protected] til en hvilken som helst e-postklient, skrive inn en melding og trykk send. Dette vil sende en tekstmelding til telefonnummer +1 (385) 555-0168 på Verizon Wireless Network.

For eksempel sender jeg en tekstmelding til meg selv ved hjelp av Gmail.

Når telefonen mottar meldingen, skal den se slik ut:

Ganske utrolig!


PHP post Funksjon

La oss ta ting et skritt videre. Ved hjelp av SMS Gateway kan vi sende en tekstmelding via e-post ved hjelp av PHP post funksjon. De post funksjonen har følgende signatur:

bool post (streng $ til, streng $ emne, streng $ melding [, streng $ additional_headers [, streng $ additional_parameters]])

Du kan lese mer om det her.

  • $ til definerer mottaker eller mottakere av meldingen. Gyldige eksempler inkluderer:
  • $ emnet er ganske selvforklarende; Det bør være en streng som inneholder ønsket emne. Men SMS ikke krever et emne.
  • $ melding er meldingen som skal leveres. Som nevnt i PHP-håndboken, "hver linje skal skilles med en LF (\ n). Linjene skal ikke være større enn 70 tegn."

For å replikere den tidligere funksjonaliteten kan vi skrive følgende PHP-kode:

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

En teststasjon

La oss kjøre en test med PHP for å sikre at alt er riktig konfigurert og at post funksjonen vil faktisk sende en tekstmelding. Ved å bruke følgende kode kan vi kjøre:

Når telefonen mottar meldingen, ser den slik ut:

Hvis du får en feil, kan du se delen Feilsøking.

Som du ser på bildet over, viser meldingen at den kommer fra Gmail. Dette er fordi jeg ruter alle mine utgående meldinger fra min lokale server gjennom den tjenesten. Dessverre har jeg, etter denne skrivingen, mislyktes ved å endre Fra header for å reflektere en alternativ adresse. Det ser ut til at e-posthodene er fjernet og erstattet med overskrifter utarbeidet av SMS-gatewayen. Hvis noen vet om en løsning, vennligst legg igjen en kommentar og la resten av oss vite det!


Legger til brukbarhet

The Markup

Med det grunnleggende ut av veien, la oss ta denne ideen og pakke inn et brukergrensesnitt rundt det. Først vil vi sette opp en enkel form:

     

Sende SMS med PHP

Stilen

Deretter skal vi drysses i noen CSS:

kropp margin: 0; polstring: 3em 0; farge: #fff; bakgrunn: # 0080d2; font-familie: Georgia, Times New Roman, serif;  #container width: 600px; bakgrunn: #fff; farge: # 555; grense: 3px solid #ccc; -webkit-grense-radius: 10px; -moz-grense-radius: 10px; -ms-radius: 10px; border-radius: 10px; border-top: 3px solid #ddd; polstring: 1em 2em; margin: 0 auto; -webkit-boks-skygge: 3px 7px 5px # 000; -moz-box-shadow: 3px 7px 5px # 000; -mask-skygge: 3px 7px 5px # 000; boks-skygge: 3px 7px 5px # 000;  ul listestil: none; polstring: 0;  ul> li padding: 0.12em 1em label display: block; flyte: venstre; bredde: 130px;  input, textarea font-family: Georgia, Serif; 

Dette gir oss følgende enkle skjema:


Manuset

Den viktigste delen til dette er PHP-skriptet. Vi skriver den delen av koden nå:

 
  • Skriptet kontrollerer først for å se om skjemaet er sendt inn.
  • Hvis ja, sjekker det for å se om telefonnummer, carrier og smsMessage variabler ble sendt. Dette er nyttig i tilfelle der det kan være mer enn ett skjema på siden.
  • Hvis telefonnummer, carrier og smsMessage er tilgjengelige og telefonnummer og carrier er ikke tom, er det greit å forsøke å sende meldingen.
  • Meldingsargumentet i post funksjonen skal være 70 tegn i lengden per linje. Vi kan hugge meldingen til 70 tegnbiter ved hjelp av wordwrap funksjon.
  • telefonnummer og carrier er sammenkoblet og deretter sendes meldingen ved hjelp av post funksjon.
  • Hvis data mangler eller det ikke kan valideres, returnerer skriptet bare Ikke all informasjon ble sendt.
  • Endelig, post returnerer en boolsk indikerer om det var vellykket eller ikke. Verdien er lagret i $ resultat i tilfelle jeg trengte å verifisere at meldingen faktisk ble sendt.

Merk: De post Metoden gir kun beskjed om meldingen ble sendt eller ikke. Det gir ikke mulighet til å sjekke om meldingen ble mottatt av mottakerens server eller postkasse.


Den endelige koden

 
?>       

Sende SMS med PHP


Feilsøking

Localhost Error

For å kunne bruke post funksjon, må du ha en e-postserver som kjører. Hvis du kjører dette på en webverten, er du sannsynligvis greit. Men hvis du er usikker, anbefaler jeg at du snakker med en administrator. Dette gjelder også for personlige maskiner. Så hvis du får feil som?

Advarsel: mail () [function.mail]: Kunne ikke koble til mailserver på "localhost" port 25, bekrefte innstillingen "SMTP" og "smtp_port" i php.ini eller bruk ini_set () i C: \ wamp \ www \ sms \ mail-test.php

? du må installere og konfigurere en e-postserver. Dette er ikke omfattet av denne opplæringen. Men hvis du jobber på din lokale maskin, kan bytte til noe som XAMPP løse dette problemet. Alternativt kan du prøve å installere Mercury Mail sammen med WAMP, MAMP eller på et LAMP (eller SAMP eller OAMP, etc.) system (det er mange AMPer).

PHPMailer

Et annet alternativ (som er den metoden jeg foretrekker) er å bruke PHPMailer. Nedenfor er et eksempel på hvordan du bruker PHPMailer til å koble til Gmail's SMTP-server og sende meldingen.

Å bruke det er så enkelt som å inkludere en klasse i skriptet ditt.

krever 'class.phpmailer.php'; // Instantiate Class $ mail = ny PHPMailer (); // Sette opp SMTP $ mail-> IsSMTP (); // Setter opp en SMTP-tilkobling $ mail-> SMTPDebug = 2; // Dette vil skrive ut feilsøkingsinfo $ mail-> SMTPAuth = true; // Tilkobling med SMTP krever autorisasjon $ mail-> SMTPSecure = "tls"; // Koble til ved hjelp av en TLS-tilkobling $ mail-> Host = "smtp.gmail.com"; $ mail-> Port = 587; $ mail-> Encoding = '7bit'; // SMS bruker 7-bits koding // Autentisering $ mail-> Brukernavn = "[email protected]"; // Logg inn $ mail-> Password = "passord"; // Passord // Komponere $ mail-> Subject = "Testing"; // Emne (som ikke er nødvendig) $ mail-> Body = "Testing"; // Kropp av vårt budskap // Send til $ mail-> AddAddress ("###########vt"); // Hvor å sende den var_dump ($ mail-> send ()); // Send!

Dette skal skrive ut noe i tråd med:

Det kan ta litt mer å sette opp tilkoblingen avhengig av situasjonen din. Hvis du planlegger å bruke Gmail, har Google gitt informasjon om tilkobling.


Konklusjon

Det finnes en myriade av metoder for å utføre oppgaven med å sende en SMS gjennom et webprogram. Denne metoden er egentlig ment for lavt volummeldinger (mest sannsynlig mindre enn 1000 tekstmeldinger per måned) og utviklere som ønsker å få føttene våte uten å forkaste penger. Andre alternativer inkluderer:

  • Bruke en SMS Gateway Provider
    • Å gjøre et Google-søk vil returnere mange alternativer.
    • De fleste SMS-gatewayleverandører inkluderer en API for sending av meldinger via et webprogram.
    • Du kan vanligvis registrere deg for service til en rimelig pris, forutsatt at du planlegger å sende minst 1000 SMS-meldinger per måned.
    • Du kan leie et kort kodenummer.
  • Bruke et GSM-modem
    • Dette kan være en kostbar og langsom måte å gjøre det, siden du må kjøpe et modem og ha en kontrakt med et trådløst nettverk
    • Du må også bruke AT (Hayes) kommandosettet.
  • Bruk en direkte tilkobling til et trådløst nettverk, noe som vil kreve sterk forhandling og mye penger.

Denne opplæringen er på ingen måte en omfattende gjennomgang av sending av tekstmeldinger med PHP; men det burde komme i gang! Jeg håper denne opplæringen har vært av interesse for deg. Takk så mye for å lese!

Hvis du fortsatt trenger hjelp med dette eller andre PHP-problem, kan du prøve å kontakte en av de erfarne PHP-utviklerne på Envato Studio.