Fungsi surat php mengatur server smtp

Kemajuan teknologi – begitu juga dunia setiap hari. Tetapi beberapa hal tetap selamanya. Seperti mengirim email dengan PHP. Anda mungkin skeptis dan berpikir bahkan di tahun 2022? . W3Techs melaporkan bahwa, per Januari 2022, “PHP digunakan oleh 78 orang. 1% dari semua situs web yang bahasa pemrograman sisi servernya kami ketahui. ”

Fungsi surat php mengatur server smtp

Karena itu, mari kita lihat tutorial ini yang akan membantu Anda mengirim email dari PHP hari ini

Kirim email dari PHP. tiga hal penting yang perlu Anda ketahui segera

Pertama, ada fungsi built-in PHP mail() dan cukup sederhana

Kedua, meskipun fungsi surat bawaan PHP () sangat sederhana, ia menyediakan fungsionalitas terbatas untuk mengirim email. Anda tidak akan dapat menambahkan lampiran ke email Anda, dan membuat template HTML yang indah dengan gambar tersemat juga akan menjadi tugas yang rumit.  

Tiga, fungsi surat PHP () mengirim email dari situs web Anda yang dapat menyebabkan masalah pengiriman karena masalah keamanan seperti kecurigaan spam dan daftar hitam. PHP mail() juga biasanya tidak mengizinkan Anda mengirim email menggunakan server SMTP secara eksternal, dan tidak mendukung autentikasi SMTP

Opsi apa yang Anda miliki untuk mengirim email dalam PHP?

Ada empat yang populer

  1. Fungsi mail() PHP bawaan;
  2. PHPMailer;
  3. Mailer Symfony;
  4. Layanan pengiriman email pihak ketiga seperti Mailtrap, Sendgrid, Mailgun dll

Kami akan membahasnya selangkah demi selangkah

Fungsi surat bawaan PHP ()

Mail() adalah pembungkus di atas utilitas sendmail, jadi sendmail harus diinstal di sistem terlebih dahulu

Inilah yang dapat Anda lakukan dengan fungsi surat bawaan PHP ().  

  • buat pesan HTML/teks sederhana tanpa lampiran dan gambar
  • mengirimkannya ke satu atau beberapa penerima
  • sertakan tajuk tambahan ke pesan
  • tambahkan parameter tambahan ke perintah `sendmail`

Perlu diingat bahwa ketika Anda mengirim email dengan mail(), Anda mungkin menemukan beberapa masalah keterkiriman yang parah. Pesan yang dikirim tidak akan mendapat manfaat dari penyiapan SPF dan DKIM di domain Anda, oleh karena itu, pesan kemungkinan besar akan diperlakukan sebagai spam oleh MTA (Mail Transfer Agent) penerima. Dengan demikian, pengiriman keseluruhan pesan email yang dikirim melalui surat PHP () tidak dijamin. Selain itu, Anda tidak akan menerima pesan pengembalian jika terjadi kegagalan pengiriman

Jika Anda masih berkomitmen pada fungsi email bawaan PHP() dan siap menerima tantangan, mari kita lihat sintaks dasar skrip PHP dan parameter utamanya.  

Sintaks dan parameter

Sintaks surat PHP cukup sederhana

<?php
mail($to,$subject,$message,[$headers],[$parameters]);
?>

Ini menggunakan parameter berikut.  

  • “$to” = your message recipient(s). The email address format may be [email protected] or User . In general, it needs to comply with RFC 2822. It is mandatory.
  • “$subjek” = subjek pesan Anda.  
  • “$message” = badan pesan Anda. Garis harus dipisahkan dengan LF (\n). Setiap baris tidak boleh melebihi 70 karakter
  • “[$headers]” = yang wajib adalah header “dari”. itu harus ditentukan, jika tidak, Anda akan menerima pesan kesalahan seperti Peringatan. surat(). "sendmail_from" tidak disetel di php. ini atau kebiasaan “Dari. ” tajuk hilang

Header tambahan menunjukkan penerima lain atau salinan pesan Anda seperti CC atau BCC. Mereka bisa berupa array di mana key adalah nama header dan nilai adalah nilai header. Atau mereka bisa menjadi string. Dalam hal ini header harus dipisahkan dengan CRLF (\r\n)

  • [$parameters] = untuk menentukan parameter tambahan yang ditentukan dalam pengaturan konfigurasi sendmail_path

Untuk detail lebih lanjut dan parameter tambahan, lihat dokumentasi PHP.  

Mengirim email HTML menggunakan fungsi PHP mail()

Badan pesan dapat ditulis dalam HTML. Namun, seperti yang telah kami sebutkan di atas, itu harus sederhana.  

Dalam fungsi email PHP(), bagian pesan HTML akan terlihat seperti ini

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';
_

Penting untuk diingat bahwa untuk mengirim email HTML, Anda perlu mengatur header Content-type
$headers[] = 'Versi MIME. 1. 0’;
$headers[] = 'Tipe konten. teks/html;

Protokol Transmisi Sederhana (SMTP)

Di mana saya menentukan pengaturan SMTP? . Buka folder instalasi file PHP dan konfigurasikan di file php. file ini. Tetapi ini hanya akan berfungsi untuk solusi seperti localhost atau XAMPP karena seperti yang telah kami sebutkan, fungsi PHP mail() tidak mendukung autentikasi SMTP dan tidak mengizinkan pengiriman pesan melalui server eksternal.  

Untuk mengirim email tanpa SMTP, Anda juga dapat merujuk ke layanan pihak ketiga seperti Mailtrap, SendGrid, atau Mailgun.  

Mengirim banyak email

Untuk mengirim pesan Anda ke beberapa penerima, tentukan alamat email mereka di parameter “$to” =  pisahkan dengan koma(-s).   

Ini satu-satunya metode yang cocok dengan fungsi mail() asli. Jika Anda perlu mengirim pesan dalam jumlah besar dalam satu lingkaran, coba paket surat eksternal seperti Symfony Mailer. Atau solusi pihak ketiga

Bagaimana cara mengirim email menggunakan PHP melalui formulir kontak?

Ada juga beberapa cara untuk melakukan ini. Dan topik ini membutuhkan tutorial khusus. Baik Anda menjalankan situs web WordPress, atau memerlukan formulir kontak sederhana, lihat penyandian ini untuk formulir kontak PHP dengan Google reCaptcha.  

Kami menjelaskan cara kerjanya secara detail, plus kami melalui banyak cara lain untuk membuat formulir kontak di PHP dalam panduan khusus kami tentang kode PHP untuk mengirim email dari formulir kontak. Dengarkan

<?php
$errors = [];
$errorMessage = '';
$successMessage = '';
$secret = 'your site key';

if (!empty($_POST)) {
  $name = $_POST['name'];
  $email = $_POST['email'];
  $message = $_POST['message'];
  $recaptchaResponse = $_POST['g-recaptcha-response'];
  $recaptchaUrl = "https://www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$recaptchaResponse}";
  $verify = json_decode(file_get_contents($recaptchaUrl));
  
  if (!$verify->success) {
    $errors[] = 'Recaptcha failed';
  }
  if (empty($name)) {
    $errors[] = 'Name is empty';
  }
  if (empty($email)) {
    $errors[] = 'Email is empty';
  }
  else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'Email is invalid';
  }
  if (empty($message)) {
    $errors[] = 'Message is empty';
  }

  if (!empty($errors)) {
    $allErrors = join('<br/>', $errors);
    $errorMessage = "<p style='color: red;'>{$allErrors}</p>";
  } else {
    $toEmail = '[email protected]';
    $emailSubject = 'New email from your contant form';
    $headers = ['From' => $email, 'Reply-To' => $email, 'Content-type' => 'text/html; charset=iso-8859-1'];
    $bodyParagraphs = ["Name: {$name}", "Email: {$email}", "Message:", $message];
    $body = join(PHP_EOL, $bodyParagraphs);
    if (mail($toEmail, $emailSubject, $body, $headers)) {
      $successMessage = "<p style='color: green;'>Thank you for contacting us :)</p>";
    }
    else {
      $errorMessage = "<p style='color: red;'>Oops, something went wrong. Please try again later</p>";
    }
  }
}
?>

<html>
  <body>
    <script src="https://www.google.com/recaptcha/api.js"></script>
    <form action="/form.php" method="post" id="contact-form">
      <h2>Contact us</h2>
      <?php echo((!empty($errorMessage)) ? $errorMessage : '') ?>
      <?php echo((!empty($successMessage)) ? $successMessage : '') ?>
      <p>
        <label>First Name:</label>
        <input name="name" type="text"/>
      </p>
      <p>
        <label>Email Address:</label>
        <input style="cursor: pointer;" name="email" type="text"/>
      </p>
      <p>
        <label>Message:</label>
        <textarea name="message"></textarea>
      </p>
      <p>
        <button
        class="g-recaptcha"
        type="submit"
        data-sitekey="your site key"
        data-callback='onRecaptchaSuccess'
        >
          Submit
        </button>
      </p>
    </form>

    <script>
    function onRecaptchaSuccess() {
      document.getElementById('contact-form').submit()
    }
    </script>
  </body>
</html>

Bagaimana cara mengirim email dengan PHPMailer?

PHPMailer adalah perpustakaan pengiriman email klasik dan paling populer untuk PHP. Itu layak mendapatkan artikel dan tutorial terpisah. Untuk mendapatkan ikhtisar mendetail tentang kode php di PHPMailer, baca panduan kami tentang cara mengirim email menggunakan PHPMailer

Apa yang dapat Anda lakukan dengan PHPMailer

  • buat template HTML/multipart yang kompleks
  • tambahkan lampiran dan gambar tersemat
  • kirim email dari SMTP yang diautentikasi.  

PHPMailer dilindungi dari serangan injeksi header dan secara otomatis memvalidasi email.  

Sekarang kirim, katakanlah, konfirmasi pemesanan hotel dengan PHPMailer

<?php
// Start with PHPMailer class
use PHPMailer\PHPMailer\PHPMailer;
require_once './vendor/autoload.php';
// create a new object
$mail = new PHPMailer();
// configure an SMTP
$mail->isSMTP();
$mail->Host = 'smtp.mailtrap.io';
$mail->SMTPAuth = true;
$mail->Username = '1a2b3c4d5e6f7g';
$mail->Password = '1a2b3c4d5e6f7g';
$mail->SMTPSecure = 'tls';
$mail->Port = 528;

$mail->setFrom('[email protected]', 'Your Hotel');
$mail->addAddress('[email protected]', 'Me');
$mail->Subject = 'Thanks for choosing Our Hotel!';
// Set HTML 
$mail->isHTML(TRUE);
$mail->Body = '<html>Hi there, we are happy to <br>confirm your booking.</br> Please check the document in the attachment.</html>';
$mail->AltBody = 'Hi there, we are happy to confirm your booking. Please check the document in the attachment.';
// add attachment // just add the '/path/to/file.pdf', 'filename.pdf'
$mail->addAttachment('//confirmations/yourbooking.pdf', 'yourbooking.pdf');
// send the message
if(!$mail->send()){
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

Perhatian. untuk pesan email ini kami menggunakan potongan kode berikut

$mail->isSMTP();
$mail->Host = 'smtp.mailtrap.io';
$mail->SMTPAuth = true;
$mail->Username = '1a2b3c4d5e6f7g';
$mail->Password = '1a2b3c4d5e6f7g';
$mail->SMTPSecure = 'tls';
$mail->Port = 528;
_

untuk menyetel server email, port SMTP, dan mengaktifkan autentikasi email.  

paket surat PHP

Seperti yang telah kami sebutkan, fungsi PHP mail() asli tidak dirancang untuk membuat template email dan mengirim email dalam jumlah besar. Selain itu, ini menyebabkan beberapa masalah pengiriman yang serius. Jadi kami akan merekomendasikan menggunakan beberapa paket surat eksternal sebagai gantinya. Untuk tahun 2022, Pear. Mail dan Swift Mailer bukan barang lagi (karena sudah ketinggalan jaman sekarang), jadi pilihan yang jelas adalah Symfony Mailer.  

Komponen Symfony Mailer & Mime membangun sistem yang solid untuk membuat dan mengirim email – lengkap dengan dukungan untuk pesan multi-bagian, integrasi Twig, inlining CSS, lampiran file, dll. Kami telah membuat panduan langkah demi langkah untuk Mengirim email di Symphony. mulai dari penginstalan hingga penyiapan transportasi, serta pembuatan dan pengiriman pesan. Jangan ragu untuk menggunakannya untuk keuntungan Anda. Jangan ragu untuk beralih ke arus 6. 1 dokumentasi versi untuk detail spesifik

Ingatlah bahwa di sini kami menunjukkan penggunaan mandiri dari paket ini, dan itu sudah terintegrasi ke dalam Symfony dan ke dalam framework Laravel. Jadi menggunakannya lebih sederhana saat bekerja dengan kerangka kerja sama sekali

<?php

use Symfony\Component\Mailer\Mailer; 
use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport; 
use Symfony\Component\Mime\Email;

require_once './vendor/autoload.php';


$transport = (new EsmtpTransport('smtp.mailtrap.io', 2525, false))
                ->setUsername('155d3ee688e2b6')
                ->setPassword('1ca3b8a278cf32');

$mailer = new Mailer($transport); 

$email = (new Email())
            ->from('[email protected]')
            ->to('[email protected]')
            ->subject('Time for Symfony Mailer!')
            ->text('Sending emails is fun again!')
            ->html('<p>See Twig integration for better HTML integration!</p>');

$mailer->send($email);    

Mengirim email dalam PHP dengan layanan email pihak ketiga

Jika aplikasi Anda memerlukan pengiriman email otomatis dan analitik email, selalu lebih baik menggunakan layanan email pihak ketiga. Mengapa? . ini memberi Anda lebih banyak kendali atas infrastruktur email

Ada banyak layanan email pihak ketiga yang dapat Anda integrasikan dengan aplikasi Anda, seperti Sendgrid, Mailgun, dll. Tapi, Platform Pengiriman Email Mailtrap mungkin bisa dibilang yang Anda butuhkan

Menggunakan Mailtrap untuk mengirim email dengan PHP

Jika Anda mencari layanan pengiriman email yang andal dan bebas repot dengan PHP, Anda mungkin harus mempertimbangkan Pengiriman Email Mailtrap. Ini adalah layanan API/SMTP Email yang memungkinkan hingga 60 hari log email untuk pemecahan masalah yang lebih baik (menyimpan data keras Anda selama rentang waktu ini).  

Dasbor dengan snapshot yang jelas tentang keadaan infrastruktur email Anda selalu tersedia untuk analitik.  

Fungsi surat php mengatur server smtp

Keuntungan lain Pengiriman Email Mailtrap adalah peringatan keterkiriman email kami yang tepat waktu yang memberi Anda kontrol lebih besar atas infrastruktur email dan otoritas domain Anda. Artinya, jika ada yang salah dengan keterkiriman Anda, Anda mendapatkan peringatan dengan tabel berkode warna plus wawasan tentang tempat untuk memeriksa masalah keterkiriman. Namun, Mailtrap mengirimi Anda laporan mingguan reguler tentang kinerja keterkiriman Anda agar Anda tetap mendapatkan informasi terbaru tentang kinerja pengiriman dan keterkiriman email Anda

Fungsi surat php mengatur server smtp

Integrasi Mailtrap API untuk PHPBuka tab Sending Domains, pilih API/SMTP Integration, pilih API one, dan pilih PHP dari library
Anda akan menemukan kredensial yang diperlukan di sana, cukup salin dan tempel

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://send.api.mailtrap.io/api/send',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_POSTFIELDS =>'{"from":{"email":"[email protected]","name":"Mailtrap Test"},"to":[{"email":"[email protected]"}],"subject":"You are awesome!","text":"Congrats for sending test email with Mailtrap!","category":"Integration Test"}',
    CURLOPT_HTTPHEADER => array(
        'Authorization: Bearer <your api token>,
        'Content-Type: application/json'
    ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
_

Sekarang Anda dapat mulai mengirim

Coba Mengirim Email dalam PHP dengan Mailtrap Gratis

Konfigurasi server

Berikut adalah bagaimana konfigurasi server SMTP Anda untuk mulai mengirim dengan PHP akan terlihat seperti di Mailtrap untuk PHPMailer (buka kredensial SMTP di antarmuka Mailtrap, lalu cukup salin dan tempel)

<?php
// configure an SMTP
$mail->isSMTP();
$mail->Host = 'smtp.mailtrap.io';
$mail->SMTPAuth = true;
$mail->Username = 'api';
$mail->Password = '********2ff0';
$mail->SMTPSecure = 'tls';
$mail->Port = 528;

Coba Mailtrap Gratis

Tiga masalah umum dengan email PHP

Kami hanya akan membahas masalah dasar di sini. Jika Anda memiliki masalah khusus yang tidak disebutkan di sini, lihat dokumentasi PHP, atau dukungan penyedia layanan pengiriman

Karakter yang ditampilkan salah

Katakanlah email tidak menampilkan karakter bahasa Jerman (umlaut) dengan benar

Kemudian, Anda perlu mengatur Content-Type dan Charset di header email

<?php
$headers = 'Content-Type: text/plain; charset=utf-8' . "\r\n";
?>
_

Sebagian besar, UTF-8 adalah pilihan terbaik Anda

Kemudian, tambahkan tajuk berikut juga

<?php
$headers .= 'Content-Transfer-Encoding: base64' . "\r\n";
?>
_

Sekarang, Anda dapat menggunakan UTF-8 dan Base64 untuk menyandikan baris subjek atau nama penerima dengan benar jika memerlukan karakter tertentu

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';
_0

Dan jangan lupa untuk menyandikan pesan email Base64 juga

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';
_1

Konfigurasi Windows dan Linux

Masalah mungkin muncul jika PHP Anda tidak dikonfigurasi dengan benar di php. file ini.  

Untuk pengguna Windows, seharusnya terlihat seperti ini

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';
_2

Pengguna Linux hanya perlu memberi tahu PHP lokasi aplikasi sendmail mereka. Jalur dan semua sakelar yang diinginkan harus ditentukan ke direktif sendmail_path

Konfigurasi untuk Linux akan terlihat seperti ini

// Message
$message = '
<html>
<head>
  <title>Review Request Reminder</title>
</head>
<body>
  <p>Here are the cases requiring your review in December:</p>
  <table>
    <tr>
      <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th>
    </tr>
    <tr>
      <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td>
    </tr>
    <tr>
      <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td>
    </tr>
  </table>
</body>
</html>
';
_3

Fungsi surat PHP tidak mengirim email

Ini bisa sangat rumit. Namun, berikut adalah beberapa hal yang dapat Anda lakukan untuk mengatasinya

  • Pastikan fungsi mail() Anda dipanggil dengan benar. (Jika salah satu dari tiga parameter tidak benar, pengiriman akan gagal);
  • Periksa koneksi port (Jika Anda berbagi server hosting, port 25 dan 587 tetap diblokir secara default. Kemudian, Anda perlu menggunakan port 2525);
  • Pastikan semua tajuk tersedia dan memiliki sintaks yang benar;
  • Periksa apakah pengaturan MTA/server web Anda sudah benar. Anda dapat menggunakan Mailtrap untuk tujuan ini

Bagaimanapun, pemecahan masalah dan pengujian membutuhkan perhatian khusus dan analisis mendalam. Di sini, Anda dapat mengetahui lebih lanjut tentang cara menguji email yang dikirim dari PHP

Pertimbangan terakhir

Pada artikel ini, kami telah menjelaskan prinsip, sintaks, dan parameter pengiriman email PHP dasar. Kami juga meninjau cara utama mengirim email dengan PHP. fungsi surat bawaannya dan paket surat eksternal paling populer.  

Namun, dalam banyak situasi, Anda dapat mempertimbangkan untuk menggunakan integrasi layanan email pihak ketiga seperti Mailtrap untuk menghemat waktu, uang, dan tenaga

Bagaimana cara mengatur server SMTP di PHP?

Menulis Kode PHP untuk Mengirim Email Menggunakan SMTP Gmail .
Langkah 1. Unduh pustaka PHPMailer dari tautan github ini. .
Langkah 2. Menulis Kode PHP untuk membuat koneksi SMTP. .
Langkah 3. Sertakan paket dan file untuk protokol PHPMailer dan SMTP. .
Langkah 4. Inisialisasi PHP Mailer dan atur SMTP sebagai protokol surat

Apa sintaks fungsi mail () yang benar di PHP?

"\r\n"; email($to,$subject,$message,$headers);

Bagaimana cara mengirim email menggunakan fungsi PHP mail()?

PHP menggunakan fungsi mail() untuk mengirim email. Fungsi ini memerlukan tiga argumen wajib yang menentukan alamat email penerima, subjek pesan, dan pesan sebenarnya, selain itu ada dua parameter opsional lainnya. email( ke, subjek, pesan, header, parameter );

Apakah fungsi email PHP menggunakan SMTP?

PHP mailer menggunakan Simple Mail Transmission Protocol (SMTP) untuk mengirim email . Di server yang dihosting, pengaturan SMTP sudah ditetapkan. Pengaturan email SMTP dapat dikonfigurasi dari “php. ini” di folder instalasi PHP.