Advertisement
  1. Code
  2. PHP

Cara Mengirim Email di Laravel

Scroll to top
Read Time: 9 min

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

Pada artikel ini, kita akan mengeksplorasi Mail API di web framework Laravel. Laravel mengambil keuntungan dari library populer SwiftMailer, yang mudah digunakan dan dilengkapi dengan berbagai driver email yang bisa dipilih. Pada tahap akhir artikel ini, kita akan melalui demonstrasi mendalam tentang konsep yang dibahas di paruh pertama artikel ini.

Menyiapkan Prasyarat

Laravel menerapkan pembungkus di atas library SwiftMailer yang membuat manajemen email sangat mudah dikonfigurasi dan digunakan pada saat bersamaan. Anda dapat menemukan pengaturan email default di config/mail.php.

1
<?php
2
3
return [
4
5
    /*

6
    |--------------------------------------------------------------------------

7
    | Mail Driver

8
    |--------------------------------------------------------------------------

9
    |

10
    | Laravel supports both SMTP and PHP's "mail" function as drivers for the

11
    | sending of e-mail. You may specify which one you're using throughout

12
    | your application here. By default, Laravel is setup for SMTP mail.

13
    |

14
    | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses",

15
    |            "sparkpost", "log", "array"

16
    |

17
    */
18
19
    'driver' => env('MAIL_DRIVER', 'sendmail'),
20
21
    /*

22
    |--------------------------------------------------------------------------

23
    | SMTP Host Address

24
    |--------------------------------------------------------------------------

25
    |

26
    | Here you may provide the host address of the SMTP server used by your

27
    | applications. A default option is provided that is compatible with

28
    | the Mailgun mail service which will provide reliable deliveries.

29
    |

30
    */
31
32
    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
33
34
    /*

35
    |--------------------------------------------------------------------------

36
    | SMTP Host Port

37
    |--------------------------------------------------------------------------

38
    |

39
    | This is the SMTP port used by your application to deliver e-mails to

40
    | users of the application. Like the host we have set this value to

41
    | stay compatible with the Mailgun e-mail application by default.

42
    |

43
    */
44
45
    'port' => env('MAIL_PORT', 587),
46
47
    /*

48
    |--------------------------------------------------------------------------

49
    | Global "From" Address

50
    |--------------------------------------------------------------------------

51
    |

52
    | You may wish for all e-mails sent by your application to be sent from

53
    | the same address. Here, you may specify a name and address that is

54
    | used globally for all e-mails that are sent by your application.

55
    |

56
    */
57
58
    'from' => [
59
        'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'),
60
        'name' => env('MAIL_FROM_NAME', 'Example'),
61
    ],
62
63
    /*

64
    |--------------------------------------------------------------------------

65
    | E-Mail Encryption Protocol

66
    |--------------------------------------------------------------------------

67
    |

68
    | Here you may specify the encryption protocol that should be used when

69
    | the application send e-mail messages. A sensible default using the

70
    | transport layer security protocol should provide great security.

71
    |

72
    */
73
74
    'encryption' => env('MAIL_ENCRYPTION', 'tls'),
75
76
    /*

77
    |--------------------------------------------------------------------------

78
    | SMTP Server Username

79
    |--------------------------------------------------------------------------

80
    |

81
    | If your SMTP server requires a username for authentication, you should

82
    | set it here. This will get used to authenticate with your server on

83
    | connection. You may also set the "password" value below this one.

84
    |

85
    */
86
87
    'username' => env('MAIL_USERNAME'),
88
89
    'password' => env('MAIL_PASSWORD'),
90
91
    /*

92
    |--------------------------------------------------------------------------

93
    | Sendmail System Path

94
    |--------------------------------------------------------------------------

95
    |

96
    | When using the "sendmail" driver to send e-mails, we will need to know

97
    | the path to where Sendmail lives on this server. A default path has

98
    | been provided here, which will work well on most of your systems.

99
    |

100
    */
101
102
    'sendmail' => '/usr/sbin/sendmail -bs',
103
104
    /*

105
    |--------------------------------------------------------------------------

106
    | Markdown Mail Settings

107
    |--------------------------------------------------------------------------

108
    |

109
    | If you are using Markdown based email rendering, you may configure your

110
    | theme and component paths here, allowing you to customize the design

111
    | of the emails. Or, you may simply stick with the Laravel defaults!

112
    |

113
    */
114
115
    'markdown' => [
116
        'theme' => 'default',
117
118
        'paths' => [
119
            resource_path('views/vendor/mail'),
120
        ],
121
    ],
122
123
];

Ketika mengirim email, Laravel mendukung driver yang berbeda untuk dipilih. Seperti yang Anda lihat, default MAIL_DRIVER diset ke smtp.

Jika Anda akan menggunakan driver smtp untuk mengirim email, Anda juga diharuskan mengatur setelan terkait hal lainnya seperti MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, dan MAIL_PASSWORD

Di sisi lain, jika Anda akan menggunakan driver sendmail, maka Anda ingin memastikan bahwa jalur sistem sendmail diset ke nilai yang benar di file config/mail.php.

Anda juga dapat mengatur alamat from yang akan digunakan saat mengirim kiriman di bawah from kunci. Dan akhirnya, jika Anda ingin menggunakan rendering email berbasiskan-Markdown, Anda dapat mengatur pengaturan di bawah markdown kunci.

Ceri di atas adalah bahwa Anda juga bisa menggunakan penyedia layanan email pihak ketiga seperti Mailgun, Mandrill, SES, dan SparkPost. Jika Anda menggunakan salah satu layanan tersebut, Anda harus memastikan bahwa Anda mengatur setelan yang sesuai di file config/services.php.

Jadi itu adalah pengantar dasar untuk pengaturan mail API yang terkait di Laravel. Dari bagian selanjutnya dan seterusnya, kita akan melalui contoh khusus yang menunjukkan bagaimana cara mengirim email.

Membuat Mailable Class

Pada bagian ini, kita akan membuat class mailable, yang akan digunakan untuk mengirim email. Kelas yang dapat dikirim bertanggung jawab untuk mengirim email menggunakan mailer yang dikonfigurasi di file config/mail.php. Sebenarnya, Laravel sudah menyediakan perintah artisan yang memungkinkan kita membuat template dasar.

1
php artisan make:mail DemoEmail

That should create a blank email template at app/Mail/DemoEmail.php, as shown in the following snippet.

1
<?php
2
3
namespace App\Mail;
4
5
use Illuminate\Bus\Queueable;
6
use Illuminate\Mail\Mailable;
7
use Illuminate\Queue\SerializesModels;
8
use Illuminate\Contracts\Queue\ShouldQueue;
9
10
class DemoEmail extends Mailable
11
{
12
    use Queueable, SerializesModels;
13
14
    /**

15
     * Create a new message instance.

16
     *

17
     * @return void

18
     */
19
    public function __construct()
20
    {
21
        //

22
    }
23
24
    /**

25
     * Build the message.

26
     *

27
     * @return $this

28
     */
29
    public function build()
30
    {
31
        return $this->view('view.name');
32
    }
33
}

Mari kita ganti isi file itu dengan yang berikut ini.

1
<?php
2
3
namespace App\Mail;
4
5
use Illuminate\Bus\Queueable;
6
use Illuminate\Mail\Mailable;
7
use Illuminate\Queue\SerializesModels;
8
use Illuminate\Contracts\Queue\ShouldQueue;
9
10
class DemoEmail extends Mailable
11
{
12
    use Queueable, SerializesModels;
13
    
14
    /**

15
     * The demo object instance.

16
     *

17
     * @var Demo

18
     */
19
    public $demo;
20
21
    /**

22
     * Create a new message instance.

23
     *

24
     * @return void

25
     */
26
    public function __construct($demo)
27
    {
28
        $this->demo = $demo;
29
    }
30
31
    /**

32
     * Build the message.

33
     *

34
     * @return $this

35
     */
36
    public function build()
37
    {
38
        return $this->from('sender@example.com')
39
                    ->view('mails.demo')
40
                    ->text('mails.demo_plain')
41
                    ->with(
42
                      [
43
                            'testVarOne' => '1',
44
                            'testVarTwo' => '2',
45
                      ])
46
                      ->attach(public_path('/images').'/demo.jpg', [
47
                              'as' => 'demo.jpg',
48
                              'mime' => 'image/jpeg',
49
                      ]);
50
    }
51
}

Ada dua metode penting yang umumnya bisa dilakukan oleh kelas mailable untuk diimplementasikan—__construct dan build. Metode __construct digunakan untuk menginisialisasi objek yang seharusnya Anda gunakan dalam template email. Di sisi lain, metode build digunakan untuk menginisialisasi lebih banyak nilai spesifik-email seperti dari, template tampilan, lampiran dan sejenisnya.

Dalam kasus kita, kita telah melewati objek $demo sebagai argumen konstruktor, dan ditugaskan ke properti publik demo.

Dalam metode build, kita telah menginisialisasi spesifik-email konfigurasi.

  • from digunakan untuk menetapkan alamat email yang akan digunakan sebagai alamat.
  • Dengan menggunakan metode view, Anda dapat mengatur template email yang akan digunakan saat mengirim email menggunakan surat ini. Dalam kasus kita, kita telah mengaturnya ke mails.demo, dan ini berarti Anda perlu membuat file template tampilan di resources/views/mails/demo.blade.php.
  • Selanjutnya, metode text digunakan untuk mengatur versi teks biasa dari template email.
  • Seperti yang baru saja kita bahas, metode __construct digunakan untuk mengatur objek yang akan digunakan dalam template email, Anda juga dapat menggunakan metode with yang memungkinkan Anda mengatur data tampilan suatu pesan.
  • Selanjutnya, kita telah menggunakan metode attach untuk melampirkan gambar dengan sebuah pesan.

Tentu saja, kita perlu membuat template email yang seharusnya kita gunakan saat mengirim email. Silakan membuat sebuah file resources/views/mails/demo.blade.php seperti yang ditunjukkan pada snipet berikut.

1
Hello <i>{{ $demo->receiver }}</i>,
2
<p>This is a demo email for testing purposes! Also, it's the HTML version.</p>
3
4
<p><u>Demo object values:</u></p>
5
6
<div>
7
<p><b>Demo One:</b>&nbsp;{{ $demo->demo_one }}</p>
8
<p><b>Demo Two:</b>&nbsp;{{ $demo->demo_two }}</p>
9
</div>
10
11
<p><u>Values passed by With method:</u></p>
12
13
<div>
14
<p><b>testVarOne:</b>&nbsp;{{ $testVarOne }}</p>
15
<p><b>testVarTwo:</b>&nbsp;{{ $testVarTwo }}</p>
16
</div>
17
18
Thank You,
19
<br/>
20
<i>{{ $demo->sender }}</i>

Juga, mari kita buat versi teks biasa dari file itu di resources/views/mails/demo_plain.blade.php.

1
Hello {{ $demo->receiver }},
2
This is a demo email for testing purposes! Also, it's the HTML version.
3
4
Demo object values:
5
6
Demo One: {{ $demo->demo_one }}
7
Demo Two: {{ $demo->demo_two }}
8
9
Values passed by With method:
10
11
testVarOne: {{ $testVarOne }}
12
testVarOne: {{ $testVarOne }}
13
14
Thank You,
15
{{ $demo->sender }}

Jadi itu adalah mailable class yang anda inginkan, dan kita belum melakukannya karena kita perlu menggunakan facade Mail untuk benar-benar mengirim email. Pada bagian berikutnya, kita akan membahas bagaimana Anda dapat menggunakan Facade Mail untuk mengirim email menggunakan Mailable class DemoEmail yang baru saja dibuat di bagian ini.

Membungkus

Pada bagian ini, kita akan membuat sebuah contoh untuk menunjukkan bagaimana anda dapat menggunakan class Mailable yang telah dibuat di bagian terakhir.

Mari buat sebuah file controller di app/Http/Controllers/MailController.php dengan konten berikut.

1
<?php
2
namespace App\Http\Controllers;
3
4
use App\Http\Controllers\Controller;
5
use App\Mail\DemoEmail;
6
use Illuminate\Support\Facades\Mail;
7
8
class MailController extends Controller
9
{
10
    public function send()
11
    {
12
        $objDemo = new \stdClass();
13
        $objDemo->demo_one = 'Demo One Value';
14
        $objDemo->demo_two = 'Demo Two Value';
15
        $objDemo->sender = 'SenderUserName';
16
        $objDemo->receiver = 'ReceiverUserName';
17
18
        Mail::to("receiver@example.com")->send(new DemoEmail($objDemo));
19
    }
20
}

Penting untuk dicatat bahwa kami telah menyertakan Facade Illuminate\Support\Facades\Mail yang akan digunakan untuk mengirim email. Dalam metode send, pernyataan berikut bertanggung jawab untuk mengirim email dengan menginisialisasi Mailable App\Mail\DemoEmail di tempat pertama.

1
Mail::to("receiver@example.com")->send(new DemoEmail($objDemo));

Metode to pada Facade Illuminate\Support\Facades\Mail mengembalikan sebuah instance dari class \Illuminate\Mail\PendingMail, yang sudah berisi konfigurasi mailer dalam file config/mail.php.

Dan akhirnya, kita gunakan metode send dari class \Illuminate\Mail\PendingMail yang mengirim email yang sebenarnya.

Untuk mengujinya, mari tambahkan route yang diasosiasikan di file routes/web.php

1
// Email related routes

2
Route::get('mail/send', 'MailController@send');

Dan dengan itu di tempat, anda dapat menjalankan URL http://your-laravel-site.com/mail/send untuk melihat apakah ia bekerja seperti yang diharapkan.

Di sisi lain, jika anda ingin menguji template email anda dengan cepat, tanpa mengirim email yang sebenarnya, ada ketentuan di Laravel yang memungkinkan anda mencatat semua email keluar.

Untuk mencapainya, Anda perlu mengatur nilai MAIL_DRIVER untuk log di file config/mail.php. Selanjutnya, anda bisa menjalankan URL yang disebutkan di atas dan memeriksa file log untuk memeriksa apakah template email telah tercatat di sana.

Jika semuanya berjalan baik, anda harus melihat email yang masuk ke file storage/log/laravel.log.

Itu cukup banyak sejauh menyangkut fitur mail di Laravel, dan itu menyimpulkan artikel ini juga.

Kesimpulan

Hari ini, kita melalui mail API yang dibangun di dalam Laravel, dan ini juga mendukung berbagai macam driver.

Dimulai dengan konsep dasar, kita menerapkan mailable class yang merupakan elemen penting dalam mail API di Laravel saat kita pindahkan. Pada akhirnya, kita juga menguji mailable kelas dengan membuat sebuah custom controller untuk melihat apakah ini benar-benar bekerja.

Jika anda baru saja memulai dengan Laravel atau mencari untuk memperluas pengetahuan anda, situs, atau aplikasi dengan ekstensi, kami memiliki berbagai hal yang anda dapat pelajari di Envato Market.

Saya ingin tahu umpan balik anda dalam bentuk kueri dan komentar menggunakan umpan di bawah ini!

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.