Hướng dẫn gửi mail trong PHP với PHPMailer

DOWNLOAD

Bạn có một website bán hàng online bạn muốn nhận được thông báo khi có đơn hàng mới? Bạn là chủ một blog đang được nhiều người quan tâm và người ta muốn nhận thông báo từ bạn mỗi khi có bài viết mới thông qua email? Hay đơn giản là bạn muốn nhận được mail thông báo từ form liên hệ. Bạn có thể sử dụng hàm mail mặc định của PHP để làm điều này nhưng thường hay bị lỗi, và trong bài ngày hôm này mình muốn giới thiệu tới các bạn cách gửi mail trong php bằng cách sử dụng PHPMailer. Có thể nói đây là một trong những thư viện cơ bản nhưng không hẳn là ai cũng biết đến nó và bài này mình muốn giới thiệu đến các bạn đang gặp khó khăn trong vấn đề gửi mail trong php nên các bạn chém tay ạ.

1.Tại sao phải dùng PHPMailer?

Mặc dù trong php đã có sẵn hàm gửi mail rồi nhưng thường thì khi mail sẽ rất khó khăn phát nổ phát xịt, mail của bạn có thể nằm trong mục spam hoặc sever của bạn đã bị chặn hàm gửi mail. Lúc này bạn sẽ cần phải nghĩ đến một giải pháp thay thế đó là sử dụng một thư viện hỗ trợ việc gửi mail. Và ở đây tôi chọn PHPMailer để làm việc này. Ngoài ra còn có pear mail nhưng ít phổ biến hơn và mình cũng chưa dùng nó bao giờ các bạn có thể tìm hiểu thêm và cho ý kiến.

Các tính năng của PHPMailer

  • Gửi mail thông qua giao thức SMTP.
  • Có thể dễ dàng dùng địa chỉ email cá nhân hoặc email công ty của bạn để gửi đi làm tăng độ uy tín cho mail.
  • Gửi mail nhanh ít lỗi mail được chuyển vào thằng vào inbox.
  • Có thể thêm cc,bcc, đính kèm file.
  • Có thể tương tác hai chiều tức là khi khách hàng rep mail bạn sẽ nhận được mail trong hộp thư đến của bạn.

Và còn nhiều hơn thế nữa nếu bạn chưa biết đến nó hãy dùng đi và cảm nhận.

2. Hướng dẫn sử dụng PHPMailer

Trước tiên muốn sử dụng được bạn cần phải tải code của nó về đã. Bạn có thể tải nó về tại đây.

Sau khi tải về bạn giải nén nó ra bạn sẽ nhận được một số file nhưng bạn chỉ cần sử dụng hai file đó là class.smtp.phpclass.phpmailer.php còn những file khác bạn có thể tìm hiểu thêm trong đó có một số mẫu ví dụng cũng hay lắm đó. Bây giờ bạn hãy coppy file đó qua dự án của mình.

Sau khi đã có 2 file trên chúng ta cùng tạo 1 file có tên sendmail.php tất nhiên bạn đặt tền gì cũng được.

Và nội dung của file như sau.

<?php
	//goi thu vien
	include('class.smtp.php');
	include "class.phpmailer.php"; 
	$nFrom = "Freetuts.net";	//mail duoc gui tu dau, thuong de ten cong ty ban
	$mFrom = 'xxxx@gmail.com';	//dia chi email cua ban 
	$mPass = 'passlamatkhau';		//mat khau email cua ban
	$nTo = 'Huudepzai';	//Ten nguoi nhan
	$mTo = 'dinhhuugt@gmail.com';	//dia chi nhan mail
	$mail             = new PHPMailer();
	$body             = 'Bạn đang tìm hiểu về cách gửi email bằng php mailler trên freetuts.net chúc các bạn có 		những phút giây vui vẻ.';	// Noi dung email
	$title = 'Hướng dẫn gửi mail bằng PHPMailer';	//Tieu de gui mail
	$mail->IsSMTP();             
	$mail->CharSet  = "utf-8";
	$mail->SMTPDebug  = 0;	// enables SMTP debug information (for testing)
	$mail->SMTPAuth   = true;	// enable SMTP authentication
	$mail->SMTPSecure = "ssl"; 	// sets the prefix to the servier
	$mail->Host       = "smtp.gmail.com";	// sever gui mail.
	$mail->Port       = 465;			// cong gui mail de nguyen
	// xong phan cau hinh bat dau phan gui mail
	$mail->Username   = $mFrom;  // khai bao dia chi email
	$mail->Password   = $mPass;              // khai bao mat khau
	$mail->SetFrom($mFrom, $nFrom);
	$mail->AddReplyTo('info@freetuts.net', 'Freetuts.net'); //khi nguoi dung phan hoi se duoc gui den email nay
	$mail->Subject    = $title;// tieu de email 
	$mail->MsgHTML($body);// noi dung chinh cua mail se nam o day.
	$mail->AddAddress($mTo, $nTo);
	// thuc thi lenh gui mail 
	if(!$mail->Send()) {
		echo 'Co loi!';
		
	} else {
		
		echo 'mail của bạn đã được gửi đi hãy kiếm tra hộp thư đến để xem kết quả. ';
	}
?>

Chỉ đơn giản thế thôi, rất nhàn phải không nào, bạn thử chạy file sendmail.php và mở hộp thư đến ra kiêm tra xem có nhận được mail không nhé.

3. Hướng dẫn tạo hàm để gửi mail với PHPMailer

Như ở phần trên bạn đã gửi email thành công nhưng giả sử trên trang web của bạn bạn muốn gửi mail ở nhiều chỗ, ví dụ khi khách hàng liên hệ bạn cần gửi mail đến quản trị viên để thông báo. Khi có đơn hàng mới bạn cần gửi mail xác nhận đơn hàng và thông báo tới quản trị viên. Không lẽ bạn cứ phải ôm theo một mớ code như thế ném ở mọi file rõ ràng là không gọn gàn chút nào phải không nào. Và ở phần này mình sẽ hướng dẫn các bạn để cho chúng vào một hàm và trong hàm này hơi khác phần trên một chút là mình có bổ sung thêm tính năng thêm địa chỉ cc. Thực tế thì dựa vào phần trên bạn hoàn toàn có thể tự tạo hàm cho riêng mình nhưng ở đây mình tạo mẫu cho các bạn chưa rành lắm về hàm có thể áp dụng.Bạn hãy tạo một file functions.php để viết các hàm vào đấy. Và ở đoạn code sau tôi có tạo sẵn hai hàm một là hàm sendMail để gửi mail bình thường không có file đính kèm và hai là hàm sendMailAttachment để gửi mail có kèm theo file đính kèm. Tất nhiên bạn có thể gộp chúng thành một hàm cũng được nhưng mình muốn tách làm hai hàm riêng biệt để cho rõ ràng. Nội dung file functions.php như sau. 

<?php
function sendMail($title, $content, $nTo, $mTo,$diachicc=''){
	$nFrom = 'Freetuts.net';
	$mFrom = 'xxxx@gmail.com';	//dia chi email cua ban 
	$mPass = 'passlamatkhau';		//mat khau email cua ban
	$mail             = new PHPMailer();
	$body             = $content;
	$mail->IsSMTP(); 
	$mail->CharSet 	= "utf-8";
	$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
	$mail->SMTPAuth   = true;                  	// enable SMTP authentication
	$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
	$mail->Host       = "smtp.gmail.com";      	
	$mail->Port       = 465;
	$mail->Username   = $mFrom;  // GMAIL username
	$mail->Password   = $mPass;           	 // GMAIL password
	$mail->SetFrom($mFrom, $nFrom);
	//chuyen chuoi thanh mang
	$ccmail = explode(',', $diachicc);
	$ccmail = array_filter($ccmail);
	if(!empty($ccmail)){
		foreach ($ccmail as $k => $v) {
			$mail->AddCC($v);
		}
	}
	$mail->Subject    = $title;
	$mail->MsgHTML($body);
	$address = $mTo;
	$mail->AddAddress($address, $nTo);
	$mail->AddReplyTo('info@freetuts.net', 'Freetuts.net');
	if(!$mail->Send()) {
		return 0;
	} else {
		return 1;
	}
}

function sendMailAttachment($title, $content, $nTo, $mTo,$diachicc='',$file,$filename){
	$nFrom = 'Freetuts.net';
	$mFrom = 'xxxx@gmail.com';	//dia chi email cua ban 
	$mPass = 'passlamatkhua';		//mat khau email cua ban
	$mail             = new PHPMailer();
	$body             = $content;
	$mail->IsSMTP(); 
	$mail->CharSet 	= "utf-8";
	$mail->SMTPDebug  = 0;                     // enables SMTP debug information (for testing)
	$mail->SMTPAuth   = true;                  	// enable SMTP authentication
	$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
	$mail->Host       = "smtp.gmail.com";      	
	$mail->Port       = 465;
	$mail->Username   = $mFrom;  // GMAIL username
	$mail->Password   = $mPass;           	 // GMAIL password
	$mail->SetFrom($mFrom, $nFrom);
	//chuyen chuoi thanh mang
	$ccmail = explode(',', $diachicc);
	$ccmail = array_filter($ccmail);
	if(!empty($ccmail)){
		foreach ($ccmail as $k => $v) {
			$mail->AddCC($v);
		}
	}
	$mail->Subject    = $title;
	$mail->MsgHTML($body);
	$address = $mTo;
	$mail->AddAddress($address, $nTo);
	$mail->AddReplyTo('info@freetuts.net', 'Freetuts.net');
	$mail->AddAttachment($file,$filename);
	if(!$mail->Send()) {
		return 0;
	} else {
		return 1;
	}
}

?>
Trong hàm trên mình có để cố định phần AddReplyTo vì theo ý kiến cá nhân của mình chắc phần này thường cố định tuy nhiên nếu hệ thống của bạn gồm nhiều bộ phận thì có thể nó sẽ khác nhau bạn từ điều chỉnh cho nó phù hợp.

Bây giờ bạn quay lại file sendmail.php viết code như sau để test nhé.

<?php
	//goi thu vien
	include('class.smtp.php');
	include "class.phpmailer.php"; 
	include "functions.php"; 
	$title = 'Hướng dẫn gửi mail bằng phpmailer';
	$content = 'Bạn đang tìm hiểu về cách gửi email bằng php mailler trên freetuts.net chúc các bạn có những phút giây vui vẻ.';
	$nTo = 'Huudepzai';
	$mTo = 'dinhhuugt@gmail.com';
	$diachicc = 'xcc@gmail.com';
	//test gui mail
	$mail = sendMail($title, $content, $nTo, $mTo,$diachicc='');
	if($mail==1)
	echo 'mail của bạn đã được gửi đi hãy kiếm tra hộp thư đến để xem kết quả. ';
	else echo 'Co loi!';
?>

Đối với hàm sendMailAttachment bạn sửa lại dòng sau.

	$mail = sendMailAttachment($title, $content, $nTo, $mTo,$diachicc='','filedinhkem.docx','Day la file dinh kem');

Bạn hãy cầu hình các thông số phù hợp sau đó chạy file sendmail.php để kiểm tra xem.

3. Kết luận

Ở trên mình và các bạn vừa tìm hiểu về cách gửi mail trong php thông qua thư viện PHPMailer như đã nói ở trên, đây là một thư viện khá cơ bản và rất nhiều người biết đến rồi nhưng mình vẫn muốn giới thiệu lại để cho bạn nào chưa biết đến nó và đang gặp khó khăn trong vấn đề gửi mail có thể áp dụng được vào dự án của mình. Bài viết chỉ ở mức sơ khai các bạn có thể vận dụng sao cho linh hoạt để nó trở nên hữu dụng. Và kỹ năng lập trình của mình còn hạn chế, cũng như kiến thức có hạn nên có thể trong bài viết có nhiều chỗ không đúng thì mong được nhận sự góp ý từ phía các bạn để mình củng cố thêm. Và cũng mong các bạn thông cảm. 

Các bạn có gì không hiểu hay thắc mắc có thể đặt câu hỏi tại đây hoặc hỏi trong group đẻ được hỗ trợ tốt nhất. Không nên hỏi nhưng câu hỏi khó để tránh tình trạng tác giá bối rối không biết trả lời. Mình rất khuyến khích các mem nữ hỏi những câu kiểu như có người yêu chưa? Mình làm được quen được không? Tối đi chơi đi?....

Cuối cùng hy vọng bài viết này hữu dụng với các bạn. Chúc các bạn học tốt!

Hãy để lại link bài viết gốc khi chia sẻ bài viết này, mình sẽ report DMCA với những website lấy nội dung mà không để nguồn hoặc copy bài với số lượng lớn.

Nguồn: freetuts.net

Profile photo of adminchipheo

chipheo

Mình sinh năm 1993 tại Nam Định.Cựu sinh viên trường ĐHCN Giao Thông Vận Tải.Hiện đang độc thân. Nghề nghiệp hiện tại của mình là code dạo và bán bánh mỳ.

ĐĂNG BÌNH LUẬN: Đăng câu hỏi trên Group Facebook để được hỗ trợ nhanh nhất.