Laravel sử dụng một thư viện miễn phí, giàu chức năng “SwiftMailer” để gửi email. Sử dụng chức năng của thư viện, chúng ta có thể gửi email dễ dàng mà không gặp nhiều khó khăn. Template của email được load theo cùng cách với views, có nghĩa là bạn có thể sử dụng cú pháp Blade và chèn dữ liệu vào trong templates. Sau đây là cú pháp của chức năng gửi mail.
Cú pháp | void send(string|array $view, array $data, Closure|string $callback) |
---|---|
Tham số |
|
Trả về | Không |
Mô tả | Gửi email. |
Chú ý: Nên học PHP thật thuần thục để hiểu hơn khi tiếp cận Laravel.
Trong đối số thứ 3, con trỏ hàm $callback nhận được instance tin nhắn và với instance đó, chúng ta có thể gọi những chức năng sau đây và thay thế tin nhắn phía dưới:
- $message->subject(‘Welcome to the Vietpro Education’);
- $message->from(’email@example.com’, ‘Mr. Example’);
- $message->to(’email@example.com’, ‘Mr. Example’);
Một vài phương thức không phổ biến:
- $message->sender(’email@example.com’, ‘Mr. Example’);
- $message->returnPath(’email@example.com’);
- $message->cc(’email@example.com’, ‘Mr. Example’);
- $message->bcc(’email@example.com’, ‘Mr. Example’);
- $message->replyTo(’email@example.com’, ‘Mr. Example’);
- $message->priority(2);
Để đính kèm hoặc nhúng file, bạn có thể dùng phương thức sau:
- $message->attach(‘path/to/attachment.txt’);
- $message->embed(‘path/to/attachment.jpg’);
Mail có thể gửi HTML hoặc text. Bạn có thể chọn loại mail bạn muốn gửi trong đối số đầu tiên bằng cách truyền một mảng như sau. Loại mặc định là mail HTML. Nếu bạn muốn gửi một email với văn bản đơn giản thì sử dụng cú pháp sau.
Cú pháp
1
|
Mail::send([‘text’=>’text.view’], $data, $callback);
|
Trong cú pháp này, đối số đầu tiên sẽ cần sử dụng 1 mảng. Sử dụng “text” như là key “tên của view” và giá trị của key.
Ví dụ
Bước 1 – Giờ chúng ta sẽ gửi một email từ tài khoản Google và để làm điều này bạn cần phải thiết lập tài khoản Gmail trong file môi trường của Laravel – .env. Kích hoạt xác minh 2 bước trong tài khoản Google và tạo một ứng dụng với mật khẩu tùy chọn bằng cách chỉnh sửa các tham số .env như sau:
1
2
3
4
5
6
|
MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your–gmail–username
MAIL_PASSWORD = your–application–specific–password
MAIL_ENCRYPTION = tls
|
Bước 2 – Sau khi thay đổi file .env hãy chạy 2 dòng lệnh sau đây để xóa cache và khởi động lại server Laravel.
1
|
php artisan config:cache
|
Bước 3 – Tạo một controller gọi là MailController bằng cách chạy lệnh:
1
|
php artisan make:controller MailController —plain
|
Bước 4 – Sau khi chạy thành công, kết quả sẽ là:
Bước 5 – Copy code sau vào file app/Http/Controllers/MailController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
<span class=“pun”><?</span><span class=“pln”>php
</span><span class=“kwd”>namespace</span> <span class=“typ”>App</span><span class=“pln”>HttpControllers</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Illuminate</span><span class=“pln”>HttpRequest</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>Mail</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>HttpRequests</span><span class=“pun”>;</span>
<span class=“kwd”>use</span> <span class=“typ”>App</span><span class=“pln”>HttpControllersController</span><span class=“pun”>;</span>
<span class=“kwd”>class</span> <span class=“typ”>MailController</span> <span class=“kwd”>extends</span> <span class=“typ”>Controller</span> <span class=“pun”>{</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> basic_email</span><span class=“pun”>(){</span><span class=“pln”>
$data </span><span class=“pun”>=</span><span class=“pln”> array</span><span class=“pun”>(</span><span class=“str”>‘name’</span><span class=“pun”>=></span><span class=“str”>“Virat Gandhi”</span><span class=“pun”>);</span>
<span class=“typ”>Mail</span><span class=“pun”>::</span><span class=“pln”>send</span><span class=“pun”>([</span><span class=“str”>‘text’</span><span class=“pun”>=></span><span class=“str”>‘mail’</span><span class=“pun”>],</span><span class=“pln”> $data</span><span class=“pun”>,</span> <span class=“kwd”>function</span><span class=“pun”>(</span><span class=“pln”>$message</span><span class=“pun”>)</span> <span class=“pun”>{</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“pln”>to</span><span class=“pun”>(</span><span class=“str”>‘abc@gmail.com’</span><span class=“pun”>,</span> <span class=“str”>‘Tutorials Point’</span><span class=“pun”>)–></span><span class=“pln”>subject
</span><span class=“pun”>(</span><span class=“str”>‘Laravel Basic Testing Mail’</span><span class=“pun”>);</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“kwd”>from</span><span class=“pun”>(</span><span class=“str”>‘xyz@gmail.com’</span><span class=“pun”>,</span><span class=“str”>‘Virat Gandhi’</span><span class=“pun”>);</span>
<span class=“pun”>});</span><span class=“pln”>
echo </span><span class=“str”>“Basic Email Sent. Check your inbox.”</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> html_email</span><span class=“pun”>(){</span><span class=“pln”>
$data </span><span class=“pun”>=</span><span class=“pln”> array</span><span class=“pun”>(</span><span class=“str”>‘name’</span><span class=“pun”>=></span><span class=“str”>“Virat Gandhi”</span><span class=“pun”>);</span>
<span class=“typ”>Mail</span><span class=“pun”>::</span><span class=“pln”>send</span><span class=“pun”>(</span><span class=“str”>‘mail’</span><span class=“pun”>,</span><span class=“pln”> $data</span><span class=“pun”>,</span> <span class=“kwd”>function</span><span class=“pun”>(</span><span class=“pln”>$message</span><span class=“pun”>)</span> <span class=“pun”>{</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“pln”>to</span><span class=“pun”>(</span><span class=“str”>‘abc@gmail.com’</span><span class=“pun”>,</span> <span class=“str”>‘Tutorials Point’</span><span class=“pun”>)–></span><span class=“pln”>subject
</span><span class=“pun”>(</span><span class=“str”>‘Laravel HTML Testing Mail’</span><span class=“pun”>);</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“kwd”>from</span><span class=“pun”>(</span><span class=“str”>‘xyz@gmail.com’</span><span class=“pun”>,</span><span class=“str”>‘Virat Gandhi’</span><span class=“pun”>);</span>
<span class=“pun”>});</span><span class=“pln”>
echo </span><span class=“str”>“HTML Email Sent. Check your inbox.”</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“kwd”>public</span> <span class=“kwd”>function</span><span class=“pln”> attachment_email</span><span class=“pun”>(){</span><span class=“pln”>
$data </span><span class=“pun”>=</span><span class=“pln”> array</span><span class=“pun”>(</span><span class=“str”>‘name’</span><span class=“pun”>=></span><span class=“str”>“Virat Gandhi”</span><span class=“pun”>);</span>
<span class=“typ”>Mail</span><span class=“pun”>::</span><span class=“pln”>send</span><span class=“pun”>(</span><span class=“str”>‘mail’</span><span class=“pun”>,</span><span class=“pln”> $data</span><span class=“pun”>,</span> <span class=“kwd”>function</span><span class=“pun”>(</span><span class=“pln”>$message</span><span class=“pun”>)</span> <span class=“pun”>{</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“pln”>to</span><span class=“pun”>(</span><span class=“str”>‘abc@gmail.com’</span><span class=“pun”>,</span> <span class=“str”>‘Tutorials Point’</span><span class=“pun”>)–></span><span class=“pln”>subject
</span><span class=“pun”>(</span><span class=“str”>‘Laravel Testing Mail with Attachment’</span><span class=“pun”>);</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“pln”>attach</span><span class=“pun”>(</span><span class=“str”>‘C:laravel-masterlaravelpublicuploadsimage.png’</span><span class=“pun”>);</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“pln”>attach</span><span class=“pun”>(</span><span class=“str”>‘C:laravel-masterlaravelpublicuploadstest.txt’</span><span class=“pun”>);</span><span class=“pln”>
$message</span><span class=“pun”>–></span><span class=“kwd”>from</span><span class=“pun”>(</span><span class=“str”>‘xyz@gmail.com’</span><span class=“pun”>,</span><span class=“str”>‘Virat Gandhi’</span><span class=“pun”>);</span>
<span class=“pun”>});</span><span class=“pln”>
echo </span><span class=“str”>“Email Sent with attachment. Check your inbox.”</span><span class=“pun”>;</span>
<span class=“pun”>}</span>
<span class=“pun”>}</span>
|
Bước 6 – Copy code sau vào file resources/views/mail.blade.php
1
2
|
<span class=“tag”><h1></span><span class=“pln”>Hi, {{ $name }}</span><span class=“tag”></h1></span><span class=“pln”>
l</span><span class=“tag”><p></span><span class=“pln”>Sending Mail from Laravel.</span><span class=“tag”></p></span>
|
Bước 7 – Thêm những dòng sau vào app/Http/routes.php.
1
2
3
|
Route::get(‘sendbasicemail’,‘MailController@basic_email’);
Route::get(‘sendhtmlemail’,‘MailController@html_email’);
Route::get(‘sendattachmentemail’,‘MailController@attachment_email’);
|
Bước 8 – Vào URL sau để test email cơ bản
http://localhost:8000/sendbasicemail
Bước 9 – Màn hình sẽ hiển thị ra như sau. Vào check inbox xem email gửi đến thế nào nhé:
Bước 10 – Vào URL sau để test HTML email:
http://localhost:8000/sendhtmlemail
Bước 11 – Màn hình sẽ hiển thị ra như sau. Check inbox để xem email HTML:
Bước 12 – Vào URL sau để test HTML email với file đính kèm
http://localhost:8000/sendattachmentemail
Bước 13 – Kết quả:
Chú ý: Trong file MailController.php, địa chỉ email từ phương thức nên là địa chỉ email từ địa chỉ mà bạn có thể gửi. Nói chung, nó nên là địa chỉ email được config trong server của bạn.