Advertisement
  1. Code
  2. PHP
  3. PHP Scripts

Jak posílat textové zprávy pomocí PHP

Scroll to top

() translation by (you can also view the original English article)

Zasílání textových zpráv se stalo extrémně rozšířeným po celém světě - do té míry, do které rostoucí počet webových aplikací integroval zprávy SMS, které uživatelům upozorňují na události, prodeje nebo kupony přímo prostřednictvím svých mobilních zařízení.

V tomto tutoriálu se budeme zabývat základy posílání textových zpráv pomocí PHP.


Přehled

Odesílání textové zprávy (SMS) je skutečně snadné.

Níže je zjednodušený diagram, jak lze odeslat zprávu z webové aplikace do bezdrátového zařízení.

Projdeme si to hezky za sebou:

  • Zpráva se složí pomocí webové aplikace, která je uložena a spuštěna na serveru HTTP a posílána prostřednictvím internetu ("cloud") jako e-mailová zpráva.
  • E-mail je přijímán službou Short Message Service Gateway (SMS brána), která konvertuje zprávu z e-mailové zprávy na SMS zprávu.
  • Zpráva SMS je pak předána Středisku služeb krátkých zpráv (SMSC), což je server, který směruje data na konkrétní mobilní zařízení.
  • Zpráva se konečně přenáší přes bezdrátovou síť příjemci.

Většina bezdrátových sítí má SMS bránu, přes kterou mohou být e-mailové zprávy odesílány jako textové zprávy do mobilního zařízení. To je hezké, protože z hlediska vývojáře je zdarma - ovšem pro koncového uživatele to není bezplatná služba. Poplatky se stále vztahují na příjemce zprávy a zprávy odeslané e-mailem budou účtovány jako textová zpráva, která není v síti.


E-mail na SMS

Chcete-li poslat SMS e-mailem, budete obvykle vyžadovat pouze dvě věci:

  • Telefonní číslo nebo jedinečný identifikátor mobilního zařízení, které chcete oslovit.
  • A doménové jméno bezdrátové sítě (mnohé z nich naleznete v tomto seznamu e-mailů na adresy SMS)

Pro většinu operátorů lze dodržovat následující pravidla:

1
phoneNumber@domainName.com

phoneNumber je telefonní číslo mobilního zařízení, které zprávu odesílá, a domainName.com je adresa brány SMS sítě.

Chcete-li poslat text na adresu Mr. Example, můžete jednoduše přidat 3855550168@vtext.com do libovolného e-mailového klienta, zadejte zprávu a stiskněte poslat. Tímto odešlete textovou zprávu na telefonní číslo +1 (385) 555-0168 v síti Verizon.

Například si pošlu textovou zprávu pomocí služby Gmail.

Když telefon obdrží zprávu, měl by to vypadat takto:

Docela úžasné!


PHP funkce mail

Vezměme věci o krok dál. Pomocí brány SMS můžeme poslat textovou zprávu e-mailem pomocí PHP funkce mail. Funkce mail ma následující signaturu:

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

Více o tom můžete přečíst zde.

  • $to definuje přijímač nebo přijímače zprávy. Platné příklady zahrnují:

    • user@example.com
    • user1@example.com, user2@example.com
    • User <user@example.com>
    • User1 <user1@example.com>, User2 <user2@example.com>
  • $subject je jasný; měl by to být řetězec obsahující požadovaný předmět. SMS však nevyžaduje předmět.
  • $message je zpráva, která má být doručena. Jak je uvedeno v příručce PHP, "každý řádek by měl být oddělen LF (\ n). Řádky by neměly být větší než 70 znaků. "

Pro replikaci dřívějších funkcí bychom mohli napsat následující PHP kód:

1
mail( '3855550168@vtext.com', '', 'Testing' );

Testovací jízda

Spusťme test s PHP, abychom se ujistili, že je vše správně nastaveno a že funkce mail ve skutečnosti pošle textovou zprávu. Pomocí následujícího kódu můžeme spustit:

1
<?php
2
3
var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true)

4
5
?>

Když telefon obdrží zprávu, vypadá to takto:

Pokud se vyskytne chyba, přečtěte si část týkající se odstraňování problémů.

Jak je vidět na obrázku výše, zpráva ukazuje, že je z Gmailu. Je to proto, že všechny své odchozí zprávy směřuji z mého místního serveru přes tuto službu. Bohužel, od tohoto psaní jsem byl neúspěšný při změně záhlaví From odrážející alternativní adresu. Zdá se, že hlavičky e-mailu jsou odstraněny a nahrazeny záhlavími, které připravuje brána SMS. Pokud někdo ví o řešení, prosím, zanechte komentář a dejte nám ostatním vědět!


Přidání použitelnosti

Označení

Se základy z cesty, vezmeme si tento nápad a zabalíme ho do uživatelského rozhraní. Nejprve vytvoříme jednoduchý formulář:

1
<!DOCTYPE html>
2
 <head>
3
   <meta charset="utf-8" />
4
  </head>
5
  <body>
6
   <div id="container">
7
    <h1>Sending SMS with PHP</h1>
8
    <form action="" method="post">
9
     <ul>
10
      <li>
11
       <label for="phoneNumber">Phone Number</label>
12
       <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
13
      <li>
14
      <label for="carrier">Carrier</label>
15
       <input type="text" name="carrier" id="carrier" />
16
      </li>
17
      <li>
18
       <label for="smsMessage">Message</label>
19
       <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
20
      </li>
21
     <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
22
    </ul>
23
   </form>
24
  </div>
25
 </body>
26
</html>

Styl

Dále přidáme nějaké CSS:

1
body {
2
 margin: 0;
3
 padding: 3em 0;
4
 color: #fff;
5
 background: #0080d2;
6
 font-family: Georgia, Times New Roman, serif;
7
}
8
9
#container {
10
 width: 600px;
11
 background: #fff;
12
 color: #555;
13
 border: 3px solid #ccc;
14
 -webkit-border-radius: 10px;
15
 -moz-border-radius: 10px;
16
 -ms-border-radius: 10px;
17
 border-radius: 10px;
18
 border-top: 3px solid #ddd;
19
 padding: 1em 2em;
20
 margin: 0 auto;
21
 -webkit-box-shadow: 3px 7px 5px #000;
22
 -moz-box-shadow: 3px 7px 5px #000;
23
 -ms-box-shadow: 3px 7px 5px #000;
24
 box-shadow: 3px 7px 5px #000;
25
}
26
27
ul {
28
 list-style: none;
29
 padding: 0;
30
}
31
32
ul > li {
33
 padding: 0.12em 1em
34
}
35
36
label {
37
 display: block;
38
 float: left;
39
 width: 130px;
40
}
41
42
input, textarea {
43
 font-family: Georgia, Serif;
44
}

To nám vytvoří jednoduchý formulář:


Skript

Nejdůležitější součástí je PHP skript. Napíšeme tenhle kód:

1
<?php
2
3
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
4
 if (
5
 isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
6
  !empty( $_REQUEST['phoneNumber'] ) &&
7
  !empty( $_REQUEST['carrier'] )
8
 ) {
9
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
10
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
11
  $result = @mail( $to, '', $message );
12
  print 'Message was sent to ' . $to;
13
 } else {
14
  print 'Not all information was submitted.';
15
 }
16
}
17
18
?>
19
<!DOCTYPE html>
  • Scénář nejprve zkontroluje, zda byl formulář předložen.
  • Pokud ano, zkontroluje, jestli byly odeslány proměnné phoneNumber, carrier a smsMessage. To je užitečné v případě, že na stránce může být více než jeden formulář.
  • Je-li k dispozici phoneNumber, carrier a smsMessage, phoneNumber a carrier nejsou prázdné, je vhodné pokoušet se odeslat zprávu.
  • Argument zprávy ve funkci mail by měl mít délku 70 znaků na řádek. Zprávu můžeme rozdělit do 70 znaků pomocí funkce wordwrap.
  • phoneNumber a carrier jsou spojeny a pak je zpráva odeslána pomocí funkce mail.
  • Pokud chybí data nebo je nelze ověřit, skript jednoduše vrátí Ne všechny informace byly předloženy.
  • Konečně, mail vrátí boolean, který označuje, zda byl úspěšný nebo ne. Hodnota je uložena v $result v případě, že musím ověřit, zda byla zpráva skutečně odeslána.

Poznámka: Metoda mail upozorňuje pouze na to, zda byla zpráva odeslána nebo ne. Neposkytuje způsob, jak zkontrolovat, zda zpráva byla úspěšně přijata příjemcem serveru nebo poštovní schránkou.


Konečný kód

1
<?php
2
3
if ( isset( $_REQUEST ) && !empty( $_REQUEST ) ) {
4
 if (
5
 isset( $_REQUEST['phoneNumber'], $_REQUEST['carrier'], $_REQUEST['smsMessage'] ) &&
6
  !empty( $_REQUEST['phoneNumber'] ) &&
7
  !empty( $_REQUEST['carrier'] )
8
 ) {
9
  $message = wordwrap( $_REQUEST['smsMessage'], 70 );
10
  $to = $_REQUEST['phoneNumber'] . '@' . $_REQUEST['carrier'];
11
  $result = @mail( $to, '', $message );
12
  print 'Message was sent to ' . $to;
13
 } else {
14
  print 'Not all information was submitted.';
15
 }
16
}
1
?>
2
<!DOCTYPE html>
3
 <head>
4
   <meta charset="utf-8" />
5
   <style>
6
    body {
7
     margin: 0;
8
     padding: 3em 0;
9
     color: #fff;
10
     background: #0080d2;
11
     font-family: Georgia, Times New Roman, serif;
12
    }
13
14
    #container {
15
     width: 600px;
16
     background: #fff;
17
     color: #555;
18
     border: 3px solid #ccc;
19
     -webkit-border-radius: 10px;
20
     -moz-border-radius: 10px;
21
     -ms-border-radius: 10px;
22
     border-radius: 10px;
23
     border-top: 3px solid #ddd;
24
     padding: 1em 2em;
25
     margin: 0 auto;
26
     -webkit-box-shadow: 3px 7px 5px #000;
27
     -moz-box-shadow: 3px 7px 5px #000;
28
     -ms-box-shadow: 3px 7px 5px #000;
29
     box-shadow: 3px 7px 5px #000;
30
    }
31
32
    ul {
33
     list-style: none;
34
     padding: 0;
35
    }
36
37
    ul > li {
38
     padding: 0.12em 1em
39
    }
40
41
    label {
42
     display: block;
43
     float: left;
44
     width: 130px;
45
    }
46
47
    input, textarea {
48
     font-family: Georgia, Serif;
49
    }
50
   </style>
51
  </head>
52
  <body>
53
   <div id="container">
54
    <h1>Sending SMS with PHP</h1>
55
    <form action="" method="post">
56
     <ul>
57
      <li>
58
       <label for="phoneNumber">Phone Number</label>
59
       <input type="text" name="phoneNumber" id="phoneNumber" placeholder="3855550168" /></li>
60
      <li>
61
      <label for="carrier">Carrier</label>
62
       <input type="text" name="carrier" id="carrier" />
63
      </li>
64
      <li>
65
       <label for="smsMessage">Message</label>
66
       <textarea name="smsMessage" id="smsMessage" cols="45" rows="15"></textarea>
67
      </li>
68
     <li><input type="submit" name="sendMessage" id="sendMessage" value="Send Message" /></li>
69
    </ul>
70
   </form>
71
  </div>
72
 </body>
73
</html>

Odstraňování problémů

Chyba Localhost

Chcete-li používat funkci mail, musíte mít spuštěn poštovní server. Pokud tuto funkci provozujete na webovém hostiteli, pravděpodobně jste v pohodě. Pokud si však nejste jisti, doporučuji mluvit s administrátorem. To platí i pro osobní počítače. Takže pokud se vám objevují chyby jako ..

1
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

.. budete muset nainstalovat a konfigurovat poštovní server. To je mimo rozsah tohoto tutoriálu. Pokud však pracujete na místním počítači, může tento problém vyřešit přepnutí na něco podobného jako XAMPP. Můžete také nainstalovat Mercury Mail podél WAMP, MAMP nebo na systém LAMP (nebo SAMP nebo OAMP atd.) (To je spousta "AMP").

PHPMailer

Další možností (což je metoda, kterou dávám přednost) je použít PHPMailer. Níže je příklad, jak používat PHPMailer pro připojení k SMTP serveru Gmailu a odeslat zprávu.

Použití je stejně jednoduché jako zařazení třídy do skriptu.

1
require 'class.phpmailer.php';
2
3
// Instantiate Class

4
$mail = new PHPMailer();
5
6
// Set up SMTP

7
$mail->IsSMTP();                // Sets up a SMTP connection

8
$mail->SMTPDebug  = 2;          // This will print debugging info

9
$mail->SMTPAuth = true;         // Connection with the SMTP does require authorization

10
$mail->SMTPSecure = "tls";      // Connect using a TLS connection

11
$mail->Host = "smtp.gmail.com";
12
$mail->Port = 587;
13
$mail->Encoding = '7bit';       // SMS uses 7-bit encoding

14
15
// Authentication

16
$mail->Username   = "email.address@gmail.com"; // Login

17
$mail->Password   = "password"; // Password

18
19
// Compose

20
$mail->Subject = "Testing";     // Subject (which isn't required)

21
$mail->Body = "Testing";        // Body of our message

22
23
// Send To

24
$mail->AddAddress( "##########@vtext.com" ); // Where to send it

25
var_dump( $mail->send() );      // Send!

Toto by mělo vytisknout něco podobného:

Může to trvat trochu víc, než nastavíte připojení v závislosti na vaší situaci. Pokud plánujete používat službu Gmail, společnost Google poskytla informace o připojení.


Závěr

Existuje nesčetné množství způsobů, jak splnit úkol odesílání SMS prostřednictvím webové aplikace. Tato metoda je skutečně určena pro malý objemem (s největší pravděpodobností méně než 1 000 textových zpráv za měsíc) a vývojáři, kteří chtějí mokré nohy bez vybíjení hotovosti. Mezi další možnosti patří:

  • Použití zprostředkovatele brány SMS

    • Vyhledávání Google vrátí spoustu možností.
    • Většina poskytovatelů SMS brány obsahuje rozhraní API pro odesílání zpráv prostřednictvím webové aplikace.
    • Obvykle se můžete přihlásit za službu za přijatelnou cenu, za předpokladu, že plánujete poslat alespoň 1000 SMS zpráv za měsíc.
    • Můžete si pronajmout krátké kódové číslo.
  • Použití modemu GSM

    • To může být nákladný a pomalý způsob, jak to udělat, protože musíte koupit modem a uzavřít smlouvu s bezdrátovou sítí
    • Budete také muset použít sadu příkazů AT (Hayes).
  • Použijte přímé připojení k bezdrátové síti, což bude vyžadovat silné vyjednávání a spoustu peněz.

Tento tutoriál není v žádném případě komplexním přehledem odesílání textových zpráv pomocí PHP; ale mělo by to pro začátek stačit. Doufám, že vás tento tutoriál zaujal. Děkuji moc za čtení!

Advertisement
Did you find this post useful?
Want a weekly email summary?
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.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.