Penggunaan fungsi SENDTO pada PHP

Indonesian (Bahasa Indonesia) translation by fajar budiman (you can also view the original English article)

pesan teks telah menjadi sangat luas di seluruh dunia - ke titik di mana peningkatan jumlah aplikasi web telah terintegrasi SMS untuk memberitahukan pengguna peristiwa, penjualan atau kupon langsung melalui perangkat mobile mereka.

Dalam tutorial ini, kita akan membahas dasar-dasar mengirim pesan teks dengan PHP.


Ikhtisar

Mengirim pesan teks (SMS) sebenarnya cukup mudah.

Berikut adalah diagram sederhana dari bagaimana pesan dapat dikirim dari aplikasi web ke perangkat nirkabel.

Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP

Kami akan menguraikan - satu bagian pada suatu waktu:

  • pesan terdiri menggunakan aplikasi web yang disimpan dan dijalankan pada server HTTP dan kemudian dikirim melalui internet ( "awan") sebagai pesan email.
  • email diterima oleh Short Message Service Gateway (SMS Gateway), yang mengubah pesan dari pesan email ke pesan SMS.
  • Pesan SMS kemudian diserahkan ke Short Message Service Center (SMSC), yang merupakan server data rute ke perangkat mobile tertentu.
  • Pesan tersebut akhirnya ditransmisikan melalui jaringan nirkabel ke penerima.

Sebagian besar jaringan nirkabel memiliki gateway SMS dimana pesan email dapat dikirim sebagai pesan teks ke perangkat mobile. Ini bagus, karena, dari sudut pandang pengembang, biasanya gratis namun tentunya bukan layanan gratis bagi pengguna akhir. Biaya masih berlaku untuk penerima pesan dan pesan yang dikirim melalui email akan ditagih sebagai pesan teks non-jaringan.


Email ke SMS

Untuk mengirim SMS melalui email, umumnya Anda akan memerlukan dua hal:

  • Nomor telepon atau pengenal unik dari perangkat mobile Anda.
  • Dan nama domain jaringan nirkabel  ( banyak dapat ditemukan dalam daftar email ke alamat SMS)

Konvensi berikut dapat diikuti sebagian besar operator:

phoneNumber adalah nomor telepon dari perangkat mobile untuk mengirim pesan ke, dan domainName.com adalah alamat untuk jaringan SMS Gateway.

Untuk mengirim teks ke Mr. Contoh, Anda hanya bisa menambahkan ke email klien, ketik pesan dan tekan kirim. Ini akan mengirim pesan teks ke nomor telepon +1 (385) 555-0168 pada jaringan nirkabel Verizon.

Sebagai contoh, saya akan mengirim pesan teks ke diri saya sendiri menggunakan Gmail.

Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP

Ketika ponsel saya menerima pesan, seharusnya terlihat seperti:


Fungsi PHP's mail

Mari melakukan langkah lebih lanjut. Menggunakan SMS Gateway, kita dapat mengirim pesan teks melalui email menggunakan fungsi PHP mail ini. Fungsi mail memiliki tanda sebagai berikut:

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

Anda dapat membaca lebih lanjut di sini.

  • $to mendefinisikan penerima atau penerima pesan. contoh yang benar meliputi:
    • ,
    • Pemakai <>
    • Pemakai1<> Pemakai2<
  • $subject bersifat menjelaskan diri ; string yang berisi subjek yang diinginkan. Namun, SMS tidak membutuhkan subjek.
  • $message adalah pesan yang akan disampaikan. Seperti disebutkan di manual PHP, "setiap baris harus dipisahkan dengan LF (\ n). Garis tidak boleh lebih besar dari 70 karakter."

Untuk meniru fungsi sebelumnya, kita bisa menulis kode PHP berikut:

mail( '', '', 'Testing' );

Melakukan Percobaan

Mari kita menjalankan tes dengan PHP untuk memastikan semuanya dipersiapkan dengan benar dan bahwa fungsi mail , pada kenyataannya, mengirim pesan teks. Gunakan kode berikut, kita bisa menjalankan:

<?php

var_dump( mail( '##########@vtext.com', '', 'This was sent with PHP.' ) ); // bool(true)

?>

Ketika ponsel saya menerima pesan, terlihat seperti:

Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP

Jika Anda mendapatkan kesalahan, lihat bagian pemecahan masalah.

Seperti yang Anda lihat pada gambar di atas, pesan menunjukkan bahwa itu dari Gmail. Ini karena semua rute pesan saya keluar dari server lokal saya melalui layanan tersebut. Sayangnya, sampai tulisan ini, saya belum berhasil mengubah From header untuk mencerminkan alamat alternatif. Tampaknya header email dilucuti dan diganti dengan header disiapkan oleh SMS gateway. Jika ada yang tahu solusinya, silakan tinggalkan komentar dan biarkan sisanya kami beritahu!


menambahkan Kegunaan

The Markup

Dengan dasar-dasar keluar dari jalan, mari kita ambil ide ini dan membungkus antarmuka pengguna di sekitarnya. Pertama kita akan menyiapkan formulir sederhana:

<!DOCTYPE html>
 <head>
   <meta charset="utf-8" />
  </head>
  <body>
   <div id="container">
    <h2>Sending SMS with PHP</h2>
    <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>

The Style

Berikutnya kita akan sisipkan di beberapa CSS:

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;
}

Berikut kita berikan bentuk formulir sederhana :

Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP


The Script

Bagian yang paling penting untuk ini adalah skrip PHP. Sekarang kami akan menulis sedikit kode:

<?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>
  • Skrip pertama memeriksa untuk melihat apakah formulir telah disampaikan.
  • Jika ya, memeriksa untuk melihat apakah phoneNumbercarrier dan smsMessage variabel yang dikirim. Hal ini berguna dalam kasus di mana mungkin ada lebih dari satu formulir pada halaman.
  • Jika phoneNumbercarrier dan smsMessage tersedia dan PhoneNumber dan carrier tidak kosong, tidak apa-apa untuk mencoba untuk mengirim pesan.
  • Argumen pesan dalam fungsi mail harus 70 karakter per baris. Kita bisa memotong pesan menjadi 70 potongan karakter menggunakan fungsi wordwrap.
  • PhoneNumber dan carrier akan digabungkan dan kemudian pesan dikirim menggunakan fungsi mail.
  • Jika data hilang atau tidak dapat divalidasi, secara sederhana skrip tidak akan mengembalikan semua informasi disampaikan.
  • Akhirnya, mail mengembalikan boolean yang menunjukkan apakah itu berhasil atau tidak. Nilai tersebut disimpan dalam $result dalam kasus ini saya diperlukan untuk memverifikasi bahwa pesan itu sebenarnya dikirim.

Catatan: Metode mail hanya memberitahukan apakah pesan itu dikirim atau tidak. tidak memberikan cara untuk memeriksa untuk melihat apakah pesan itu berhasil diterima oleh server penerima atau mailbox.


Kode Final

<?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">
    <h2>Sending SMS with PHP</h2>
    <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>

Penyelesaian masalah

Kesalahan localhost

Untuk menggunakan fungsi mail, Anda harus memiliki server email yang berjalan. Jika Anda menjalankan ini pada web host, Anda mungkin baik-baik saja. Tapi jika Anda tidak yakin, saya sarankan berbicara dengan administrator. Hal ini juga berlaku untuk komputer pribadi. Jadi jika Anda mendapatkan gangguan seperti ..

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

... Anda harus menginstal dan mengkonfigurasi mail server. Ini adalah dikeluar dari lingkup tutorial ini. Namun, jika Anda bekerja pada komputer lokal Anda, beralih ke sesuatu seperti XAMPP mungkin menyelesaikan masalah ini. Atau, mencoba menginstal Mercury Mail bersama WAMP, MAMP atau pada LAMP (atau SAMP atau OAMP, dll) sistem (yang banyak 'AMPs').

PHPMailer

Pilihan lain (yang merupakan metode yang saya suka) adalah dengan menggunakan PHPMailer. Di bawah ini adalah contoh bagaimana menggunakan PHPMailer untuk terhubung ke server SMTP Gmail dan mengirim pesan.

Menggunakan itu sesederhana seperti termasuk kelas dalam skrip Anda.

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   = ""; // 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!

harus dicetak sesuatu di sepanjang baris:

Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP
Penggunaan fungsi SENDTO pada PHP

Mungkin butuh sedikit lebih untuk mengatur koneksi yang terganggu pada situasi Anda. Jika Anda berencana menggunakan Gmail, Google telah menyediakan informasi tentang menghubungkan.


Kesimpulan

Ada segudang metode untuk menyelesaikan tugas yang mengirim SMS melalui aplikasi web. Metode ini benar-benar dimaksudkan untuk pesan volume rendah (kemungkinan besar kurang dari 1.000 pesan teks per bulan) dan pengembang mencari untuk mendapatkan kaki mereka basah tanpa keluar uang tunai. Pilihan lainnya termasuk:

  • Menggunakan Provider SMS Gateway
    • Melakukan pencarian Google akan cukup banyak pilihan.
    • Kebanyakan penyedia SMS gateway mencakup API untuk mengirimkan pesan melalui aplikasi web.
    • Anda biasanya dapat mendaftar layanan dengan harga yang wajar, dengan asumsi Anda berencana mengirimkan setidaknya 1.000 pesan SMS per bulan.
    • Anda dapat menyewa kode nomor singkat.
  • Mengguanakan modem GSM
    • Hal ini dapat menjadi cara yang mahal dan lambat untuk dilakukan, karena Anda harus membeli modem dan memiliki kontrak dengan jaringan nirkabel
    • Anda juga harus menggunakan AT (Hayes) command set
  • Gunakan koneksi langsung ke jaringan nirkabel, yang akan membutuhkan beberapa negosiasi yang kuat dan banyak uang.

Tutorial ini sama sekali tidak ditinjauan secara komprehensif mengirim pesan teks dengan PHP; tetapi harus Anda memulainya! Saya harap tutorial ini menarik bagi Anda. Terima kasih banyak telah membaca!