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

Bạn có một trang web kinh doanh online bạn mong muốn thu được nhắc nhở khi có đơn hàng mới? Bạn là chủ một blog đang được nhiều người quan tâm & người ta mong muốn nhận nhắc nhở từ bạn mỗi khi có nội dung mới thông qua tin nhắn hộp thư online? Hay dễ dàng là bạn mong muốn thu được mail nhắc nhở 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, & trong bài ngày hôm này mình mong muốn giới thiệu tới các bạn cách gửi mail trong php bằng cách dùng PHPMailer. Có thể nói đây là một trong những thư viện căn bản nhưng không hẳn là ai cũng biết tới nó & bài này mình mong muốn giới thiệu đến các bạn đang gặp khổ cực trong vấn đề gửi mail trong php nên các bạn chém tay ạ.

Bài viết chính

1.Vì sao phải dùng PHPMailer?

Mặc dầu trong php đã có sẵn hàm gửi mail rồi nhưng thường thì khi mail sẽ rất khổ cực phát nổ phát xịt, mail của các bạn có thể nằm trong mục gửi tin rác hoặc sever của các bạn đã bị chặn hàm gửi mail. Hiện tại bạn sẽ cần phải nghĩ đến một phương pháp thay thế này là sử dụng một thư viện phụ trợ việc gửi mail. & bước này tôi chọn PHPMailer để làm việc này. Không những thế còn tồn tại pear mail nhưng ít thông dụng hơn & mình cũng chưa dùng nó khi nào các bạn có thể đọc thêm & cho quan điểm.

Các chức năng của PHPMailer

  • Gửi mail thông qua giao thức SMTP.
  • Có thể đơn giản dùng địa chỉ tin nhắn hộp thư online cá nhân hoặc tin nhắn hộp thư online trung tâm tư vấn du học của các 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 tin nhắn.
  • Có thể thêm cc,bcc, đính kèm file.
  • Có thể tương tác hai chiều tức là khi KH rep mail bạn sẽ thu được mail trong thùng thư đến của các bạn.

& còn nhiều không dừng lại ở đó nếu bạn chưa biết tới nó hãy dùng đi & cảm giác.

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

Trước hết bạn cần download thư viện PHPMailer 6.05 tại đây.

Import thư viện

Bạn thực hiện import thư viện vào như sau, nhớ biến đổi đường dẫn tới mã nguồn mà bạn đã lưu nhé, & phải đặt đoạn code này ở trên cùng của file.

 

1

2

3

4

5

6

7

8

include APPPATH . "../storage/PHPMailer-master/src/PHPMailer.php";

include APPPATH . "../storage/PHPMailer-master/src/Exception.php";

include APPPATH . "../storage/PHPMailer-master/src/OAuth.php";

include APPPATH . "../storage/PHPMailer-master/src/POP3.php";

include APPPATH . "../storage/PHPMailer-master/src/SMTP.php";

use PHPMailerPHPMailerPHPMailer;

use PHPMailerPHPMailerException;

 

Thự hiện gửi mail

 

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

$mail = new PHPMailer(true);                             

try {

    

    $mail->SMTPDebug = 2;                                

    $mail->isSMTP();                                     

    $mail->Hosting = 'smtp1.example.com;smtp2.example.com'

    $mail->SMTPAuth = true;                              

    $mail->Username = 'user@example.com';                

    $mail->Password = 'secret';                          

    $mail->SMTPSecure = 'tls';                           

    $mail->Port = 587;                                   

    

    $mail->setFrom('from@example.com', 'Mailer');

    $mail->addAddress('joe@example.net', 'Joe User');    

    $mail->addAddress('ellen@example.com');              

    $mail->addReplyTo('info@example.com', 'Information');

    $mail->addCC('cc@example.com');

    $mail->addBCC('bcc@example.com');

    

    $mail->addAttachment('/var/tmp/file.tar.gz');        

    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');   

    

    $mail->isHTML(true);                                 

    $mail->Subject = 'Here is the subject';

    $mail->Body    = 'This is the HTML message body <bvàgt;in bold!</bvàgt;';

    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();

    echo 'Message has been sent';

} catch (Exception $e) {

    echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;

}

 

Xem Thêm  hình nền | Thủ thuật CSS - hình nền nội dung css

Cụ thể chúng ta nên xem video để am hiểu hơn.

3. Hướng dẫn sử dụng PHPMailer Version 5x

Trước hết mong 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 khoảng thời gian tải về bạn giải nén nó ra bạn sẽ thu được một số file nhưng bạn chỉ cần sử dụng hai file này là class.smtp.php & class.phpmailer.php còn những file khác bạn có thể đọc thêm trong đó có một số mẫu ví dụng cũng hay lắm đó. Giờ đây bạn hãy sao chép tệp tin đó qua dự án của mình.

Sau khoảng thời gian đã có 2 file trên tất cả chúng ta cùng tạo 1 file có tên sendmail.php hiển nhiên bạn đặt tền gì cũng được.

& bài viết của file như sau.

 

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

<?php

    

    include('class.smtp.php');

    include "class.phpmailer.php";

    $nFrom = "Freetuts.net";   

    $mFrom = 'xxxx@gmail.com'

    $mPass = 'passlamatkhau';      

    $nTo = 'Huudepzai';

    $mTo = 'dinhhuugt@gmail.com';  

    $mail             = new PHPMailer();

    $body             = 'Bạn đang khám phá về cách gửi tin nhắn hộp thư online bằng php mailler trên freetuts.net chúc các bạn có         những phút giây vui vẻ.';  

    $title = 'Hướng dẫn gửi mail bằng PHPMailer';  

    $mail->IsSMTP();            

    $mail->CharSet  = "utf-8";

    $mail->SMTPDebug  = 0;  

    $mail->SMTPAuth   = true;   

    $mail->SMTPSecure = "ssl";  

    $mail->Hosting       = "smtp.gmail.com";   

    $mail->Port       = 465;        

    

    $mail->Username   = $mFrom

    $mail->Password   = $mPass;             

    $mail->SetFrom($mFrom, $nFrom);

    $mail->AddReplyTo('info@freetuts.net', 'Freetuts.net');

    $mail->Subject    = $title;

    $mail->MsgHTML($body);

    $mail->AddAddress($mTo, $nTo);

    

    if(!$mail->Send()) {

        echo 'Co loi!';

        

    } else {

        

        echo 'mail của các bạn đã được gửi đi hãy kiếm tra thùng thư đến để xem kết quả. ';

    }

?>

 

Chỉ dễ dàng thế thôi, rất nhàn phải không nào, bạn thử chạy file sendmail.php & mở thùng thư đến ra kiêm tra xem có thu được mail không nhé.

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

Như ở phần trên bạn đã gửi tin nhắn hộp thư online thành công nhưng giả sử trên website của các bạn bạn mong muốn gửi mail ở nhiều chỗ, chẳng hạn khi KH liên hệ bạn cần gửi mail đến quản trị viên để nhắc nhở. Khi có đơn hàng mới bạn cần gửi mail xác định đơn hàng & nhắc nhở tới quản trị viên. Không lẽ bạn cứ phải ôm theo một mớ code như vậy ném ở mọi file cụ thể là không gọn gàn chút nào phải không nào. & ở phần này mình sẽ hướng dẫn các bạn để cho chúng vào một hàm & trong hàm này hơi khác phần trên một tí là mình có bổ sung thêm chức năng thêm địa chỉ cc. Thực tiễn thì dựa theo phần trên bạn tuyệt đối có thể tự tạo hàm cho riêng mình nhưng bước này mình tạo mẫu cho các bạn chưa rành lắm về hàm có thể ứng dụng.Bạn hãy tạo một file functions.php để viết các hàm vào đấy. & ở đ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 bình không có file đính kèm & hai là hàm sendMailAttachment để gửi mail có kèm theo file đính kèm. Hẳn nhiên bạn có thể gộp chúng thành một hàm cũng được nhưng mình mong muốn tách làm hai hàm biệt lập để cho cụ thể. Bài viết file functions.php như sau.

Xem Thêm  Làm thế nào để tạo ô bảng kéo dài nhiều cột Html? - PeterElSt - html làm cho td kéo dài nhiều cột

 

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

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

<?php

function sendMail($title, $content, $nTo, $mTo,$diachicc=''){

    $nFrom = 'Freetuts.net';

    $mFrom = 'xxxx@gmail.com'

    $mPass = 'passlamatkhau';      

    $mail             = new PHPMailer();

    $body             = $content;

    $mail->IsSMTP();

    $mail->CharSet   = "utf-8";

    $mail->SMTPDebug  = 0;                    

    $mail->SMTPAuth   = true;                   

    $mail->SMTPSecure = "ssl";                

    $mail->Hosting       = "smtp.gmail.com";       

    $mail->Port       = 465;

    $mail->Username   = $mFrom

    $mail->Password   = $mPass;              

    $mail->SetFrom($mFrom, $nFrom);

    

    $ccmail = explode(',', $diachicc);

    $ccmail = array_filter($ccmail);

    if(!empty($ccmail)){

        foreach ($ccmail as => $?) {

            $mail->AddCC($?);

        }

    }

    $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'

    $mPass = 'passlamatkhua';      

    $mail             = new PHPMailer();

    $body             = $content;

    $mail->IsSMTP();

    $mail->CharSet   = "utf-8";

    $mail->SMTPDebug  = 0;                    

    $mail->SMTPAuth   = true;                   

    $mail->SMTPSecure = "ssl";                

    $mail->Hosting       = "smtp.gmail.com";       

    $mail->Port       = 465;

    $mail->Username   = $mFrom

    $mail->Password   = $mPass;              

    $mail->SetFrom($mFrom, $nFrom);

    

    $ccmail = explode(',', $diachicc);

    $ccmail = array_filter($ccmail);

    if(!empty($ccmail)){

        foreach ($ccmail as => $?) {

            $mail->AddCC($?);

        }

    }

    $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 quan điểm cá nhân của mình chắc phần này thường cố định không những thế nếu hệ thống của các bạn gồm nhiều phòng ban thì có thể nó sẽ khác nhau bạn từ bố trí cho nó thích hợp.

 

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

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

    

    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 khám phá về cách gửi tin nhắn hộp thư online 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';

    

    $mail = sendMail($title, $content, $nTo, $mTo,$diachicc='');

    if($mail==1)

    echo 'mail của các bạn đã được gửi đi hãy kiếm tra thùng thư đến để xem kết quả. ';

    else echo 'Co loi!';

?>

 

Xem Thêm  Làm thế nào để tạo một tệp HTML? - cách tạo tệp html

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

 

1

$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ố kỹ thuật thích hợp sau đó chạy file sendmail.php để kiểm soát xem.

4. Cấu hình account gmail để gửi được mail

Hiện tại google đã bổ sung một số tính năng security dành riêng cho dịch vụ ngoài, tức là các dịch vụ gửi mail thông qua smtp của google, chính vì vậy bạn phải thực hiện một số bươc sau để có thể gửi mail được.

Không sử dụng đăng nhập 2 bước

Đăng nhập 2 bước là tính năng mỗi khi bạn đăng nhập thì google sẽ gửi gift code đến sdt của các bạn, sau đó bạn nhập gift code vào thì mới đăng nhập được. Vì bạn đang gửi auto nên phải tắt tính năng này nhé.

Để tắt thì bạn vào backlink này nhé, nếu bạn chưa bật thì có thẻ bỏ qua.

Bật Allow less secure apps sang ON

Bạn vào backlink này để chuyển sang chính sách ON nhé. Thường xong ở giai đoạn này là bạn có thể gửi mail tại localhost, nhưng khi upload lên host thì không sử dụng được, bây giờ bạn phải thực hiện bước thứ 3 dưới đây.

Bật Display Unlock Captcha

Bạn vào backlink này & click vào tiếp tục để cho phép gửi mail tại bên thứ 3 nhé.

Sau khoảng thời gian giải quyết 3 bước trên là bạn đã gửi được mail rồi đấy. Trường hợp vẫn chưa gửi được thì bạn cần phải xem lại host của các bạn có phụ trợ gửi mail hay không, & có một số host bắt buộc mail phải theo tên miền nên không sử dụng được Gmail.

5. Tổng kết

Ở trên mình & các bạn vừa khám phá 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ăn bản & rất là nhiều người biết tới rồi nhưng mình vẫn mong muốn giới thiệu lại để cho bạn nào chưa biết tới nó & đang gặp khổ cực trong vấn đề gửi mail có thể ứng dụng được vào dự án của mình. Nội dung chỉ ở mức sơ khai các bạn có thể ứng dụng sao cho linh động để nó trở nên hữu ích. & tuyệt kỹ lập trình của mình còn giới hạn, cũng như tri thức có hạn nên có thể trong nội dung có nhiều chỗ không đúng thì mong được nhận sự phản hồi từ phía các bạn để mình củng cố thêm. & cũng mong các bạn cảm thông.

Các bạn có gì không hiểu hay khúc mắc có thể đặt thắc mắc tại đây hoặc hỏi trong group đẻ được phụ trợ tốt nhất. Không nên hỏi nhưng thắc mắc khó để tránh hiện trạng tác giá bối rối không biết giải đáp. Mình rất động viên 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 ước ao nội dung này hữu ích với các bạn. Chúc các bạn học tốt!

Nội dung được đóng góp bởi bạn ChiPheo

Viết một bình luận