2012-03-07 4 views
5

Tôi đang tạo một hệ thống, trong đó danh sách hàng nghìn email sẽ được gửi định kỳ, tôi biết rằng hàm mail() trong PHP khá nặng, đặc biệt nếu gọi quá nhiều lần cùng một lúc.Thư php() là một lựa chọn tốt cho việc gửi thư hàng loạt?

Khoảng cách mà hệ thống của tôi hoạt động, là tôi tạo hàng đợi email trong MySQL và gửi chúng theo lô 25 bằng cách sử dụng mail(), xóa khỏi bảng mà 25 thư được gửi hàng đầu. Và tôi đợi 2 giây giữa mỗi bộ 25.

Đây có phải là quá nhiều nỗ lực cho máy chủ hoặc tôi có thể đẩy thêm một chút nữa không? Cho phép nói 50 mỗi giây? Hoặc có một cách tốt hơn để gửi nhiều email trong thời gian ngắn hơn mà không làm mất hiệu suất của Máy chủ.

Tôi có một máy chủ chuyên dụng không có bất kỳ giới hạn cuộc gọi mail() nào.

+0

Tôi hy vọng bạn không làm việc cho những người gửi thư rác. :) – Kaz

+0

bản sao có thể có của [Danh sách gửi thư hàng loạt PHP (25K-100K)] (http://stackoverflow.com/questions/1296546/php-mass-mailing-25k-100k-lists) –

+0

hy vọng bạn đang ở trên một máy chuyên dụng , không có máy chủ chia sẻ nào sẽ cho phép loại lưu lượng truy cập này và tôi bỏ phiếu cho PHPMailer –

Trả lời

5

Có các yếu tố khác cần xem xét bên cạnh hiệu suất, nhưng câu trả lời ngắn gọn là: có các tùy chọn tốt hơn. Amazon SES và MailChimp là hai tôi biết về đã nghe phản hồi tích cực.

Nhìn vào câu trả lời j08691 của liên quan đến việc thực hiện, nhưng các vấn đề khác với việc sử dụng mail() cho mục đích này bao gồm:

  1. Khả năng mở rộng (bạn sẽ đánh một bức tường mà không có máy chủ SMTP có thể xử lý cuối cùng, và bạn đã suy nghĩ về nó)

  2. Tính toàn vẹn - Bạn có nhiều khả năng bị gắn cờ là spam khi gửi thư hàng loạt của riêng bạn, đặc biệt là sử dụng mail vì nó sử dụng sendmail cục bộ theo thiết kế.

  3. Chi phí/lợi ích và ROI - người gửi hàng loạt đáng tin cậy nhận được đúng và với tỷ lệ cạnh tranh. Tại một thời điểm nào đó, bạn phải trả ít hơn mỗi giờ để duy trì máy chủ thư của mình khi máy bị treo, lấy ra khỏi danh sách đen, viết bố cục email bằng tay, bảo trì chung, v.v ... so với số tiền bạn trả cho dịch vụ gửi thư hàng loạt.

Nhìn chung, vấn đề lớn là bạn phải làm tất cả công việc cho mình và bạn đang có khả năng để có được gắn cờ là SPAM vì lợi ích của việc không trả tiền cho một dịch vụ mà sẽ có thể gửi hàng trăm email một giây so với một trăm phút khi PHP không bận rộn làm mọi thứ khác mà nó xử lý cho ứng dụng web của bạn.

Giai thoại cá nhân (không phải xác nhận cho SES, chỉ là người gửi thư hàng loạt): Chúng tôi đã có khách hàng gửi 100 nghìn email cho mỗi chiến dịch, với tối thiểu 1 - 3 chiến dịch mỗi ngày. Họ bắt đầu phàn nàn rằng khách hàng đã nhận được email về "giao dịch hàng ngày" trễ 2 ngày.Không phải vì thư viện Mailer chậm (ngay cả khi ứng dụng này tránh sử dụng đồng bằng mail), nó không thể chắc chắn gửi tất cả của các email cho mỗi chiến dịch trước khi email không liên quan. Chúng tôi đã chuyển đổi chúng sang SES (với một số tối ưu hóa về kết thúc của chúng tôi, nhưng không nhiều), và họ có thể xóa một chiến dịch trong chưa đầy một giờ.

+0

Tôi nghe nói về những người đó, nhưng để tạo ra nội dung của mỗi email tôi cần phải lấy dữ liệu từ các bảng khác nhau trong databse của tôi, cộng với tôi có một cronjob gửi email tự động; tôi có thể làm điều đó bằng cách sử dụng MailChimp hoặc Amazon SES không? – multimediaxp

+0

Amazon SES, chắc chắn. Về cơ bản bạn có thể sử dụng nó như một máy chủ thư (nhiều hơn hoặc ít hơn). Mailchimp có một API gốc khá, nhưng tôi không thể nhớ nếu nó cho phép bạn chuyển vào nội dung tin nhắn hoặc chỉ danh sách người dùng (cách dễ dàng để tìm ra, mặc dù). SES sẽ là một lựa chọn đắt tiền hơn, vì vậy có thể có một bưu phẩm hàng loạt trung bình tốt để bắt đầu. Và lịch trình cronjob không quan trọng. Một kịch bản là một kịch bản, và người gửi hàng loạt, tuy nhiên nó kết nối, sẽ chỉ muốn các thông tin giống như bất kỳ tài nguyên nào. – Anthony

4

Từ PHP manual:

Lưu ý:

Điều đáng chú ý là các hàm mail() là không thích hợp cho lớn hơn khối lượng email trong một vòng lặp. Chức năng này mở ra và đóng một SMTP ổ cắm cho mỗi email, mà không phải là rất hiệu quả.

Để gửi số lượng lớn email, hãy xem các gói »PEAR::Mail và» PEAR::Mail_Queue.

+1

Được coi là sử dụng 'Zend_Mail'? –

+0

PEAR là một khuôn khổ đúng không? Tôi biết tôi nên đọc các tài liệu, nhưng có lẽ bạn có thể cho tôi biết nếu để cài đặt nó, tôi cần phải thực hiện lệnh trên bàn điều khiển hoặc tôi chỉ có thể tải lên các tập tin và thư mục vào máy chủ của tôi? – multimediaxp

+0

Về mặt kỹ thuật, bạn có thể thực hiện, tuy nhiên nếu bạn đang sử dụng nhà cung cấp dịch vụ lưu trữ, hầu hết trong số chúng thường được cài đặt. – j08691

4

Thử sử dụng PHPMailer. tôi đã sử dụng nó để gửi khoảng 100 thư hàng ngày mà không có bất kỳ vấn đề nào

+0

Cảm ơn! bất kỳ liên kết nào? Tôi không tìm thấy trang web PHPMailer. – multimediaxp

+0

http://phpmailer.worxware.com/? Đây có phải là một trong số – multimediaxp

+0

PHPMailer là thư viện SMTP của tôi được lựa chọn không. Chỉ cần ghi nhớ nó vẫn sẽ được chia sẻ tài nguyên với phần còn lại của PHP, giống như thư. Nó chỉ sử dụng ít tài nguyên hơn để hoàn thành công việc. – Anthony