() 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 kemails.demo
, dan ini berarti Anda perlu membuat file template tampilan diresources/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 metodewith
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> {{ $demo->demo_one }}</p> |
8 |
<p><b>Demo Two:</b> {{ $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> {{ $testVarOne }}</p> |
15 |
<p><b>testVarTwo:</b> {{ $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!