2009-10-09 22 views
5

Tôi đang sử dụng php và mysql.Có giới hạn khi sử dụng chức năng thư php không?

Tôi sẽ gửi 10k ++ (mười nghìn cộng) email để cập nhật người đăng ký của mình và đây là lần đầu tiên tôi gửi chúng. Tôi sẽ sử dụng chức năng mail php, về cơ bản đây là những gì tôi sẽ làm gì:

Đầu tiên lấy dữ liệu từ cơ sở dữ liệu:

Select name, email FROM data 

Sau đó, sử dụng vòng lặp while để gửi dữ liệu:

while($r = mysql_fetch_assoc($exe)){ 
    ... 
    if($mail){ 
     echo "success<br>"; 
    } else { 
     echo "failed<br>"; 
    } 
} 
echo "Sent all"; 

Tôi bao gồm câu lệnh if .. else, để đảm bảo rằng mỗi email được gửi thành công. Tôi có cần gì để chăm sóc không? Tôi có gặp bất kỳ sự cố nào khi GỬI ĐẾN người dùng 10K ++ không?

Có giới hạn số lượng email mà bạn sắp gửi không?

+1

liên quan - http://stackoverflow.com/questions/788596/whats-the-best-approach-to-sending-email-to-hundreds-of-recipients-from-a-zend-f – warren

Trả lời

4

Không giới hạn số email, nhưng có giới hạn thời gian của tập lệnh PHP. Xem max_execution_time đặt trong php.ini của bạn, thường là 20 hoặc 30 giây. Nếu bạn không biết điều đó, hãy sử dụng phpinfo() để tìm ra.

Hơn nữa, bạn nên thực hiện một số bước để ngăn người dùng nhận quá nhiều email. Bạn nên đánh dấu chúng là đã gửi, vì vậy chúng không nhận được các bài đăng kép nếu bạn vô tình bắt đầu tập lệnh hai lần.

Ngoài ra, bạn nên lưu ý rằng chức năng thư của php vốn đã không được tối ưu hóa chút nào. Bạn có thể thử một số thư viện, như phpmimemessage hoặc bất kỳ thư viện nào khác, điều này sẽ cho phép bạn thực hiện một số bộ nhớ đệm, ví dụ, trong số nhiều tính năng khác.

+0

Omg, tôi không biết điều đó. Vì vậy, bạn thường sử dụng "phpmimemessage" để gửi email 10k ++? Bạn đang sử dụng thư viện nào? – bbtang

+0

Tôi đã làm một cái gì đó phức tạp hơn nhiều, nhưng có, tôi đã sử dụng thư viện này để gửi thư hàng loạt (bản tin). Mimemessage là khá cũ bây giờ, có thư viện tốt hơn bây giờ, xem câu trả lời khác, hoặc google cho họ. Kịch bản của tôi đã chạy trong nền từ CLI tuy nhiên, không có giới hạn về thời gian. – Palantir

9

Xin lưu ý các ghi chú này từ mail documentation:

Lưu ý: Điều đáng chú ý là các hàm mail() là không phù hợp với khối lượng lớn email trong một vòng lặp. Chức năng này mở và đóng một ổ cắm SMTP cho mỗi email, điều này không hiệu quả lắm.
Để gửi một lượng lớn email, hãy xem các gói »PEAR :: Mail và» PEAR :: Mail_Queue.

+0

Bạn sử dụng thư viện nào để gửi email vụ nổ? Pear :: mail ?? Tôi sẽ nghiên cứu những thứ đó. Cảm ơn – bbtang

+0

sử dụng lê :: Mail_Queue, không phải thư –

2

Bạn nên tạo hàng đợi email đã gửi/không thành công, vì vậy bạn có thể thử gửi lại các lần thử không thành công và tránh gửi lại email nếu có sự cố.

Đừng tạo ra một vòng lặp mà cố gắng để gửi email 10k qua đường bưu điện()

Ngoài ra, rất có thể hạn chế bạn sẽ nhấn sẽ là của máy chủ mail của ISP hoặc máy chủ của bạn.

0

Bạn cũng có thể muốn xem xét thiết lập công cụ danh sách gửi thư "thực", chẳng hạn như mailman hoặc ít nhất sử dụng các nhóm bí danh (nếu có thể).

Ngoài ra, hãy xem các câu hỏi có liên quan trên serverfault: https://serverfault.com/questions/67154/sending-an-email-to-about-10k-users-not-spam, trong đó PHPlist được đề cập cùng với những người khác.Và ở đây - https://serverfault.com/questions/68357/whats-the-best-way-to-send-bulk-email.

Các vấn đề liên quan