Đôi khi, trong việc viết các project bằng php, mình cần phải gửi email từ localhost tới email khác. Vì vậy, trong bộ cài đặt Xampp cho Windows có sẵn mail server là Mercury Mail, việc gửi email sẽ thuận tiện hơn. Chỉ với vài bước cấu hình lại là xong .

Các bước cấu hình Mercury Mail :

1. Khởi động Mercury Mail từ Xampp Control Panel ( Đôi khi không khởi động được thì bạn phải log out và vào bằng quyền admin với XP hoặc chuột phải chọn “Run as administrator” với win Vista và Win 7 ).


2. Đầu tiên là tắt HTTP server của MM đẻ tránh xung đột với Apache:
* “Configuration” -> “Protocol modules”
* disable the check “MercuryB HTTP web server”
* Disabled cả “Mercury IMAP4rev1 server”
* Disable cả “MercuryE SMTP end-to-end delivery client”
* Enable “MercuryC SMTP relaying client”
* Click “Ok” và khởi động lại MM



3. Tiếp tục cấu hình cho MM
* “Configuration” -> “Mercury core module”, tab “General”
* Để gửi mail từ localhost thì kiểm tra xem “localhost” có phải là giá trị trong “internet name for this system”
* Bỏ chọn “Send copies of all errors to postmaster”
* Chuyển sang tab “Local domains” và nhìn xem trong list có “localhost” ( ở local host or server) và “localhost” (internet name) chưa. Nếu chưa có thì add vào ( thường là có sẵn cả rồi ).
* Click “Ok”



4. Tiếp tục cấu hình cho MercuryS SMTP Server để gửi email đi
* “Configuration” -> “MercuryS SMTP Server”
* Chọn tab “General” và đặt tên cho SMTP servre vào ở “Announce myself as”
* “Listen on TCP/IP port” điền vào “25″. Mặc định ban đầu là 25
* Điền “127.0.0.1″ vào “IP interface to use”. Đó là ip của localhost chứ không phải là IP của máy PC trong mạng Lan
* Giờ thì giới hạn quyền truy cập vào mail server. Chỉ cho máy PC chạy mail server đó gửi mail đc thôi.
1. Chuyển sang tab “Connection Control” click vào “Add restriction”, điền dài IP đều là 127.0.0.1 và 127.0.0.1
2. Chọn “Allow connections”
3. Đừng có chọn thêm mấy cái tick ở dưới rồi click “Ok”
* Click “OK” và tiếp tục config cái khác



5. Tiếp theo là config cho MercuryP POP3 Server
* “Configuration”-> “MercuryP POP3 Server”
* Điền “Listen on TCP port” -> “110″ và “IP interface to use” -> “127.0.0.1″
* Chuyển sang tab “Connection control” và làm như các bước ở trên
* Click “Ok” tiếp đi



6. Cấu hình tiếp cho “MercuryC SMTP Client”
* “Configuration” -> “MercuryC SMTP Client”
* Bình thường, để gửi email này tới email khác trên mạng internet, ta cần phải có một SMTP server với một tên miền. Vì vậy, nếu đã có một email bên ngoài ( lấy luôn Gmail đi ) thì giờ ta sẽ dùng luôn email của Google để làm mail chính ( cũng giống như gửi mail từ Outlook vậy ). Có một số cách để cấu hình cho chính localhost làm mail server với một tên miền được mua ở ngoài. Nhưng mấy cái đó có lẽ mình chẳng cần dùng lắm nên giờ chưa quan tâm. Hiện tại cứ cấu hình cái MM để gửi đc mail , việc chính vẫn là làm việc với mấy hàm mail của php.
* Điền địa chỉ SMTP của Gmail vào “Smart host name”. Của Gmail là “smtp.gmail.com.
* Xác định cách để nhờ Gmail gửi thư đi tại “Connection port/type”. Nên để là “Connection port/type = 465″ và “SSL encryption using direct connection”.
* Điền username và password vào và click “ok”



7. Tiếp theo chỉnh lại Mercury user để có quyền gửi email
* “Configuration”-> “Manage local users”
* Phải có ít nhất là “Admin” hoặc “postmaster”



8. Giờ thì Mercury xong cả rồi. Tiếp theo thì phải chỉnh lại với php thôi.
* Mở file php.ini ra. Với Xampp thì nó nằm ở “xampp/php/php.ini”
* Tìm [mail function]
* Điền những cái này vào bên dưới.
1. “SMTP = localhost”
2. “smtp_port = 25″
3. “sendmail_from = postmaster@localhost”
* Lưu php.ini lại và khởi động lại Apache


9. Mọi thứ bây giờ là ok rồi. Giờ thì chỉ việc thử lại xem sao
* Vào “File” -> “Send mail message” và thử gửi đi 1 bức thư nào đấy tới 1 địa chỉ email khác ( cứ làm thêm 1 cái Gmail nữa là mail test nhận )
* Bấm vào “Window” -> “Tile” và nhìn vào cửa sổ “Mercury Core Prozess” để coi quá trình gửi và nhận email có ok hay không
* Ban đầu có lẽ hơi lâu chút xíu, nó không thể gửi và nhận ngay lập tức đâu. Sau này thì sẽ ok hơn

Bây giờ hãy tạo một file sendmail.php để test hàm gửi mail chút.
view plaincopy to clipboardprint?
PHP Code:
< ?php
$to 
"ngbacong@gmail.com";
$subject "Test email from localhost with Mercury";
$fromheader "From : admin@bacong.net";
$content "This email is a test mail send from localhost. If you read this line, it's working OK ";
$ok mail($to,$subject,$content,$fromheader);
if(
$ok) {
     echo 
"Mail send OK. Look at MM proccess to watch if it out the localhost. If error, check all your step again !";
}else {
     echo 
"Holly sh!t, something wrong ?";
}
?> 
Chú ý: Nếu gặp lỗi thông báo khi gửi mail bằng file sendmail.php như sau “SMTP server response:553 We do not relay non-local mail, sorry.” thì hãy kiểm tra lại địa chỉ mail trong php.ini hoặc và lại Mercury, trong MercuryS->Connection Control-> bỏ chọn “Do not permit SMTP relaying of non-local mail”. Có thể sẽ hết lỗi.