logo
Hỗ trợ: 24/7
Điện thoại: 098 984 8886
Email: info@thuonghieuweb.com

Code gửi email từ website với PHP

2/5 1605 votes
updated on 2020-10-21

e-mail.pngMột trong những yêu cầu hay được khách hàng nhắc đến khi làm website là cần phải có một form liên hệ để người viếng thăm web có thể gửi email trực tiếp từ website cho chủ nhân của website. Bài viết này giới thiệu hai cách để thực hiện yêu cầu này

Cách thứ nhất dựa vào hàm mail() sẵn có của PHP


Đâu tiên chúng ta cần kiểm tra xem trên máy chủ hoặc hosting có dịch vụ mail nào đang chạy bằng cách gõ lệnh

# netstat -plnt | grep :25

Kết quả trong ví dụ sau đây cho thấy là dịch vụ mail EXIM đang chạy



Sau đó nhập đoạn code gửi mail bằng hàm mail() của PHP được show dưới đây vào file contact-us.php



Các bạn có thể download toàn bộ đoạn code trên ở đây rồi cứ thế up lên hosting là chạy.

Lưu ý:  Cách này nhanh gọn, và hiệu quả nhưng việc tùy biến các thông số như tên người gửi, người nhận, tiêu đề thư... không được linh hoạt. Mặt khác, hàm này sử dụng các dịch vụ mail smtp sẵn có của localhost như là Sendmail, Exim hoặc postfix, chứ không tương tác được với các MTA khác như là gmail hoặc yahoo, vì vậy nếu như máy chủ hosting của bạn không hỗ trợ smtp hoặc bị blacklist không gửi được mail ra ngoài thì cách này không có tác dụng. Khi đó chúng ta dùng cách thứ hai như dưới đây


Cách thứ hai. Sử dụng phpmailer

Để sử dụng phpmailer, các bạn cần có một địa chỉ email gmail, hotmail hoặc yahoo hỗ trợ pop3/smtp. gmail và hostmail thì đương nhiên có hỗ trợ pop3 rồi. Tuy nhiên, gmail có cơ chế bảo mật chống giả mạo email cực kỳ chặt chẽ nên khi sử dụng phpmailer sẽ có một số khó khăn, vì vậy khuyên bạn nên dùng hotmail hoặc yahoo. Với yahoo thì lưu ý là hiện tại chỉ có các email yahoo.com.vn là hỗ trợ pop3/smtp còn yahoo.com thì không.

Trong ví dụ dưới đây chúng ta sử dụng một hòm thư của yahoo.com.vn

Đầu tiên các bạn cần download 3 file sau:

  • class.phpmailer.php
  • class.smtp.php
  • senmail.php
Sau đó upload lên hosting. Hai file đầu tiên là class nên chúng ta không cần quan tâm. Chúng ta sẽ xem nội dung và cách tùy biến file sendmail.php dưới đây:



Toàn bộ các dòng mầu trong khung mầu xanh là để tùy biến và có thể lấy dữ liệu từ form gửi mail đưa sang. Giải thích chi tiết như sau:

        $mail->Host = "smtp.mail.yahoo.com";  Dòng này chỉ ra là sẽ dùng dịch vụ email của yahoo. nếu dùng hotmail thì thay bằng "smtp.live.com"
        $mail->Port = 465;   Đây là cổng yahoo sử dụng để gửi mail, nếu là hotmail thay bằng 587
        $mail->SMTPAuth = true; Các dịch vụ mail yahoo và hotmail, gmail đều để là true. Nếu bạn muốn dùng dịch vụ mail ngay trên server thì có thể đặt là false để bỏ qua thủ tục xác thực user
        $mail->SMTPSecure = "ssl";  Yahoo và Gmail dùng giao thức bảo mật ssl cho email. Hotmail thì dùng giao thức "tls"
        $mail->Username = "mailsender.vietnam@yahoo.com.vn";  Đây là account mail  yahoo hay hotmail của bạn để xác thực
        $mail->Password = ".............";  Ở đây gõ mật khẩu email của bạn
        $mail->AltBody = "liên hệ qua web"; Đây là dòng giới thiệu ngắn về email mỗi khi có mail đến các email client sẽ alert bằng dòng này.
        $mail->From = "mailsender.vietnam@yahoo.com.vn"; Địa chỉ email này sẽ xuất hiện ở vị trí người gửi. Lưu ý đối với gmail và yahoo thì địa chỉ này phải trùng với địa chỉ Username, vì yahoo và google sẽ check xem email có bị giả mạo người gửi hay không. Đối với hotmail thì không nhất thiết.
        $mail->FromName = "Khách Hàng";  Tên này xuất hiện bên cạnh địa chỉ người gửi ở bước trên.
        $mail->AddAddress("hai@vdata.com.vn","bộ phận chăm sóc khách hàng công ty VDATA"); Đây là địa chỉ mà email này sẽ được gửi đến, bạn để một hòm thư khác với hòm thư người gửi nói trên để test.
        $mail->AddReplyTo("tranhaivn@yahoo.com","Nguyễn Văn A");  Mặc dù đã có 2 thuộc tính From và Fromname nêu trên để xác định email và tên của người gửi xuất hiện trong thư. Nhưng địa chỉ ReplyTo này mới là địa chỉ mà nếu như bạn bấm reply email thì nó sẽ gửi đến. Cái này nên để địa chỉ email khách hàng lấy ở form trên web, để tiện cho việc reply cho khách hàng 
        $mail->WordWrap = 50;  Trình bày text trong email, 50 ký tự thì xuống dòng
        $mail->IsHTML(true);  Email được gửi đi trong format HTML cho đẹp
        $mail->Subject = "Email liên hệ từ website"; Tiêu đề của thư
        $mail->Body = "Xin chào, chúng tôi cần liên hệ với bạn"; Nội dung của thư

Chúc các bạn thành công với code email này.

Bonus: Nếu như bạn muốn dùng phpmailer với dịch vụ email sẵn có của hosting và không muốn xác thực user lằng nhằng thì bạn có thể đọc thêm phần dưới đây.

Kiểm tra xem SMTP có đòi hỏi xác thực hay không?


Để kiểm tra xem SMTP có yêu cầu phải xác thực trước khi gửi đi hay không các bạn tham khảo cách gửi một email test từ dòng lệnh trong bài viết Hướng dẫn cài đặt mail server trên linux, bước 6. Nếu theo các bước đó mà bạn gửi được một email đến hòm thư của mình thì có nghĩa là SMTP trên server này không đòi hỏi authentication và có thể yên tâm triển khai hàm mail() của PHP. Còn nếu như bạn gặp thông báo lỗi 550 authentication required như hình dưới đây thì bạn sẽ cần phải theo các hướng dẫn bên dưới để tắt chế độ đòi hỏi authentication của dịch vụ smtp đi.




Tắt chế độ authentication đối với dịch vụ mail EXIM

Gõ lệnh

# vi /etc/exim.conf

Tìm dòng authenticated = * trong mục accept rồi thêm một dấu chấm than vào trước như hình dưới đây



Sau đó khởi động lại dịch vụ mail exim bằng lệnh sau

# service exim restart

Để tắt chức năng authentication với các dịch vụ sendmail hay postfix, tôi sẽ hướng dẫn cho các bạn trong một bài viết khác. 

Lưu ý:


Nếu các bạn chạy thử phpmailer trên localhost sử dụng môi trường giả lập là wamp hay xamp thì có thể gặp lỗi thông báo là ssl chưa được bật. Để mở dịch vụ ssl cho wamp, các bạn mở file php.ini, tìm dòng extension=php_openssl.dll và gỡ dấu ; rào ở đằng trước dòng này đi để bật openssl cho php khi đó sẽ chạy được.


   
 
Có thể bạn muốn xem thêm....

Những điều cần biết khi xây dựng website

Xây dựng một website không đơn giản chỉ là một gian hàng hay một tờ rơi. Bạn cần phải làm mọi cách để website của mình hướng tới khách hàng, và quan trọng hơn cả, là làm sao để nội dung của bạn có sức lan tỏa nhanh chóng trong môi trường mạng từ đó lôi kéo khách hàng đến với website của bạn

Xem chi tiết

Những điều cần biết về dịch vụ email với tên miền riêng

Email tên miền riêng là email gắn với tên miền của doanh nghiệp kiểu như tennhanvien@tencongty.com. Email tên miền riêng sẽ tạo sự chuyên nghiệp và tin cậy khi giao dịch, đồng thời có thể cấp phát cho nhân viên khi mới đi làm, thu hồi lại khi nhân viên đó thôi việc và lưu trữ được mọi giao dịch trên email mà không sợ nhân viên đổi mật khẩu, mang theo hòm thư khi rời công ty...

Xem chi tiết
Đội ngũ lập trình viên, kỹ thuật viên và seo-er của Thương Hiệu Web cam kết

Hỗ trợ 24/7

Hỗ trợ khách hàng 24 giờ 1 ngày, 7 ngày 1 tuần qua điện thoại, email và chat online

Hoàn tiền 100%

Trong thời gian 45 ngày sử dụng dịch vụ, nếu quý khách không hài lòng!

Cam kết uptime 99.99%

Nếu dịch vụ của quý khách bị gián đoạn, chúng tôi sẽ cộng thêm 1 tháng sử dụng

KHÁCH HÀNG NÓI VỀ CHÚNG TÔI

Một đơn vị xây dựng web tận tâm và chuyên nghiệp!

"Thương Hiệu Web là đơn vị thiết kế website có năng lực, tôn trọng và có trách nhiệm với khách hàng, đặt mình vào vị trí khách hàng để mang lại cho khách hàng nhiều giá trị từ chính dịch vụ của mình. Với tôi, Thương Hiệu Web là một lựa chọn hợp lý!" Chị Nguyễn Phượng, TP kinh doanh, Công Ty Cổ Phần Quản Lý Công Trình Đô Thị Hải Dương.

Xem bình luận trên FB
Sitemap Điều khoản sử dụng Chính sách riêng tư
Bản quyền thuộc về công ty cổ phần truyền thông số VDATA
Tầng 2, tòa nhà 71 Hoàng Cầu, Đống Đa, Hà Nội
Điện thoại: (04) 3990 9643 - Email: info@vdata.com.vn
Giấy chứng nhận ĐKKD số: 0102766780, do Sở KHĐT Tp Hà Nội cấp ngày 28/04/2009

Online