Belajar Kode Program

Blog belajar menulis kode program dan aplikasi komputer

Sabtu, 02 September 2017

Kirim Email dengan Yii2

Salah satu fitur pada aplikasi web yang sudah jadi adalah pengiriman email, baik yang sifatnya konfirmasi maupun notifikasi. Nah, secara default, Yii sudah memiliki dukungan untuk fitur ini. Pada tahap pengembanan, pengiriman email dibuat simulasi dengan disimpan di folder runtime. Akan tetapi, kadang ketika mau beralih ke fase produksi, ada juga programmer yang masih bingung bagaimana cara mengirim email yang sesungguhnya dengan Yii2 ini. Artikel di sini akan menjelaskan kepada pembaca bagaimana cara melakukannya.
Ada beberapa cara melakukan pengiriman email di Yii2. Melalui email Google atau layanan lainnya. Namun sebelumnya mari kita pahami kode pengaturan pengiriman email di Yii2. Pada file konfigurasi, pengaturan email ada di bagian components:

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
],

Pada konfigurasi di atas, 'useFileTransport' berisi true berarti kita menggunakan simulasi pengiriman email. Email yang dikirim dibuatkan sebuah file yang isinya adalah email yang kita kirimkan. Selanjutnya kita akan mencoba konfigurasi dengan mail Google.

Mail Google

Untuk settingan dengan mail milik Google, ada yang harus dilakukan dulu, yaitu membuat App Password atau password khusus aplikasi kita. Jadi, Google memfasilitasi pembuatan password yang berbeda dengan password kita dalam mengakses email. Tetapi dengan syarat Anda harus mengaktifkan mode pengamanan dua langkah di pengaturan akun Anda. Silakan membuatnya di laman App Passwords di sini.



Kemudian lakukan setting seperti berikut ini

        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.gmail.com', 
                'username' => 'blorakutop@gmail.com',
                'password' => 'password_khusus', //bukan password email biasanya
                'port' => '587',
                'encryption' => 'tls',
            ],
        ],

Cara Mengirim Email

Ya, lalu bagaimana cara mengirim emailnya? Gunakan sintaks sederhana seperti ini:

Yii::$app->mailer->compose()
    ->setFrom('mail_pengirim@contoh.com')
    ->setTo($mail_tujuan)
    ->setSubject($mail_judul)
    ->setHtmlBody($mail_isi)
    ->send();

atau kalau isi emailnya bukan format HTML:

$email = Yii::$app->mailer->compose()
 ->setTo($mail_tujuan)
 ->setFrom([Yii::$app->params['supportEmail'] => \Yii::$app->name . ' email robot'])
 ->setSubject($judul)
 ->setTextBody($isi_teks)
 ->attach($file_path) //untuk attachment
 ->send();
if($email){
 //jika email berhasil
}

Adapun juga kita menggunakan template tertentu, kita dapat membuatnya seperti contoh berikut:

Yii::$app->mailer->compose(['html' => '@app/mail-templates/html-email-01', 'text' => '@app/mail-templates/text-email-01'], [/*Some params for the view */])
     ->setFrom('from@domain.com')
     ->setTo('someemail@server.com')
     ->setSubject('Advanced email from Yii2-SwiftMailer')
     ->send();

Lalu, bagaimana mengirim email beberapa kali ke beberapa tujuan? Perhatikan contoh berikut

$messages = [];
foreach ($users as $user) {
    $messages[] = Yii::$app->mailer->compose()
        // ...
        ->setTo($user->email);
}
Yii::$app->mailer->sendMultiple($messages);

Gampang kan ya?

Email Pihak Ketiga

Saat ini ada banyak pihak ketiga yang menyediakan layanan gratis mengirim email. Karena gratis, harap dimaklumi saja jika ada keterbatasan, misalnya dalam hal jumlah email maksimal yang dapat dikirimkan setiap harinya atau setiap bulannya. Di antaranya adalah sebagai berikut:


Demikian ulasan tentang pengiriman email dengan Yii2, semoga memberi inspirasi untuk kita semua.

Referensi:

Tidak ada komentar:

Posting Komentar