09/10/2018, 22:35

PHP mail() & SMTP

Xin chào các bạn!
Tôi muốn hỏi một số vấn đề liên quan đến cách gửi email thông qua PHP. Tôi được biết hàm mail() được xây dựng sẵn trong php dung để gửi email từ server, tuy nhiên, đọc trong manual của php thì nói là server này đồng thời phải là một server SMTP. Bây giờ nếu như tôi muốn test các chương trình bằng localhost trước thì làm sao để thử hàm mail()? Sau khi tìm một hồi trên mạng, tôi có down được một đoạn code khá hay(theo tác giả) dùng socket:

<?php

function sendmail($ToName, $ToEmail, $FromName, $FromEmail, $Subject, $Body, $Header)
{
$smtp = fsockopen("server smtp của bạn", 25);

$InputBuffer = fgets($smtp, 1024);

fputs($smtp, "HELO sitename.com ");
$InputBuffer = fgets($smtp, 1024);
fputs($smtp, "mail From: $FromEmail ");
$InputBuffer = fgets($smtp, 1024);
fputs($smtp, "RCPT To: $ToEmail ");
$InputBuffer = fgets($smtp, 1024);
fputs($smtp, "DATA ");
$InputBuffer = fgets($smtp, 1024);
fputs($smtp, "$Header");
fputs($smtp, "From: $FromName <$FromEmail> ");
fputs($smtp, "To: $ToName <$ToEmail> ");
fputs($smtp, "Subject: $Subject ");
fputs($smtp, "$Body . ");
fputs($smtp, "QUIT ");
$InputBuffer = fgets($smtp, 1024);

fclose($smtp);
}
sendmail(tèn tén ten các tham số cần thiết vào đây);
?>
Tôi dùng thử thì thấy đúng là hay thật! Tuy nhiên, nếu để ý thì ta có thể thấy là đoạn code trên khá nguy hiểm vì rõ ràng nó không yêu cầu bất kỳ cái gì ngoài server smtp, mà cái này thì có thiếu gì. Vì tôi không nắm rõ lắm về SMTP, bạn nào có thể cho đánh giá về đoạn code trên được không? Vì rõ ràng tôi có thể dùng nó để bomb mail cũng như giả danh, mà điều này thì có lẽ php đã tính trước được rồi!
Còn một điều nữa tôi muốn hỏi là trong php có cách nào bắt lỗi được không? Có những lỗi khi lập trình, đơn giản như thiếu dấu ";" thôi chẳng hạn mà không tinh mắt(nhất là những đoạn code dài), hoặc những lỗi runtime thì bắt kiểu gì vì dù có lỗi thì file vẫn chạy và chỉ cho ra màn hình trắng tinh, bó tay!
thuytrinh viết 00:50 ngày 10/10/2018
Em cũng đang làm cái này. Nhưng chờ hoài chẳng có ai hướng dẫn cả.
bathazar viết 00:49 ngày 10/10/2018
- Nếu bạn dùng các secure thì nó sẽ không hiển thị lỗi = 1 script để không hiển thị một số lỗi ko cần thiết... Người lập trình làm viếc đó với mục đích bảo mật

- Còn khi bạn lập trình thì lỗi ở đâu server nó báo lỗi tại đó.

- PHP cho phép gửi đến nhiều người. Và không phải PHP không biết nhưng thực sự không thể chặn lại nếu chặn lại cũng sẽ chặn người có lợi ích chính đáng. Để có thể gửi cho nhiều người không phải là dễ.

- SMTP bạn chỉ cần hiểu là một cồng để truyền và gửi thư cùng với POP...

- Bạn muốn có 1 SMTP thì cũng ko dễ vì nhiều nơi đòi hỏi username & pass. Nếu bạn không có thì ko thể... Thường những SMTP cho bạn gửi free thì sẽ rất dễ treo server vì tốn quá nhiều tài nguyên. Gửi được hơn 1000 đã là khá...

- Với lại spam qua PHP là sự ngu ngốc vì tất cả sẽ đương nhiên cho vào bulk hay junk mail hè hè.... ! Tuy nhiên có cách vào inbox nhưng nếu bạn spam thì hãy quên đi thôi !
thuytrinh viết 00:49 ngày 10/10/2018
bathazar sao làm khó dễ anh em dữ thế? đây là diễn đàn trao đổi học tập mà nếu ai có vấn đề khó khăn gì thì mới đưa câu hỏi lên chứ?
dừng nên nghĩ cái gì cũng là xấu cả?
Em biết trong VBB có thể gởi mail đến tất cả các thành viên, nhưng mà em muốn tự mình viết ra 1 module như vậy.
Adam viết 00:37 ngày 10/10/2018
Nếu bạn muốn test trên localhost thì nên download mailserver free nhu Argosoft mail để test.Thông thường 1 số host free sẽ ko hỗ trợ hàm socket còn nếu host mua thì thường có sẵn SMTP .
Còn vấn đề Bommail thì mập mờ lắm vì lúc được lúc ko vì còn do cái mailserver của nạn nhân đó nữa.
POP3 chỉ là giao thức hỗ trợ checkmail thôi.
Bài liên quan
0