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!
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!
Bài liên quan
- 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 !
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.
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.