2016-01-08 17 views
5

Tôi thường đọc rằng thư của PHP() -Chức năng sử dụng sendmail nội bộ.SwiftMailer, PhpMailer, v.v ...: Sự khác biệt giữa thư() và sendmail

Vậy tại sao Mail-Libraries như SwiftMailer, PHPMailer, vv cho chúng ta những cơ hội để lựa chọn giữa mail()sendmail?

Nó không giống nhau sao?

Không bao giờ nghe bất kỳ ai nói rằng đó KHÔNG phải là điều tương tự!

Xin hãy giúp, vì tôi thực sự bối rối về điều đó!

+2

thư() là chính cho một email (mở và đóng một ổ cắm SMTP cho mỗi email bạn gửi) trong đó sendmail() là nhiều hơn cho quy trình theo lô (nhiều) – Haymaker

Trả lời

4

Trên hệ thống giống Unix, mail() thực sự sử dụng sendmail, nhưng đây không phải là trường hợp trên Windows (không có sendmail, vì vậy, mail() thay vì gửi qua SMTP).

Lợi ích thực sự của Swiftmailer và cộng sự, là chúng cung cấp trình bao bọc OOP xung quanh việc gửi email, để tạo ra nội dung email của bạn (tạo đúng phong bì MIME và nhận tiêu đề chính xác có thể phức tạp, đặc biệt khi người dùng nhập yêu cầu thoát) và cũng là cơ chế truyền tải thực tế được trừu tượng hóa (vì vậy bạn có thể thay thế SMTP hoặc sendmail bằng phương tiện tùy chỉnh bằng API của nhà cung cấp thư mà không phải thay đổi tất cả mã của bạn).

0

Mã nhị phân sendmail điển hình (ví dụ: từ mã bưu chính), ngay cả khi được gọi qua chức năng mail của PHP, mở kết nối đồng bộ tới máy chủ cục bộ và thực hiện giao dịch SMTP đầy đủ. Điều này có thể có nghĩa là thực sự là chậm hơn so với sử dụng SMTP trực tiếp - và thực tế là the postfix docs recommend using SMTP to localhost tùy chọn gửi sendmail nếu bạn đang tìm kiếm hiệu suất. Đặc biệt, bạn có thể hưởng lợi từ việc giữ gìn khi gửi nhiều thư bằng cách sử dụng SMTP.

Một mẹo là bạn có thể chuyển một thông số bổ sung cho sendmail (cụ thể là -O DeliveryMode=b) để yêu cầu nó hoạt động không đồng bộ, trong trường hợp nó trả về ngay lập tức, giúp thư của bạn gửi phản hồi nhanh hơn, nhưng vì PHP không được thiết lập để xử lý điều đó, bạn sẽ mất khả năng xử lý các lỗi có thể xảy ra do đó điều này không được khuyến khích. Bạn có thể sử dụng tính năng này bằng cách tự gọi mã nhị phân sendmail bằng các tùy chọn đó hoặc bằng cách chuyển nó vào tham số $additional_parameters.

Nói chung không có sự khác biệt nào giữa tùy chọn thư và sendmail trong PHPMailer, mặc dù nó có thể hữu ích nếu bạn muốn sử dụng một nhị phân sendmail khác với mã nhị phân mà PHP được đặt để sử dụng.

+0

OHHH NOOO bạn nhầm lẫn posrtfix với sendmail và gửi email –

+0

Không ở tất cả. Tôi biết sự khác biệt và câu trả lời này giải quyết trực tiếp câu hỏi. Tôi sẽ không đặt nhiều cổ phiếu theo ý kiến ​​của bạn cho câu trả lời bạn đăng. – Synchro

0

Ussualy i use mail() function. Nhưng đôi khi tôi cần phải gửi email qua máy chủ SMTP không cục bộ. Chắc chắn tôi có thể thay đổi thiết lập trong php.ini, nhưng tôi nghĩ tốt hơn là sử dụng một số thư viện email. Lựa chọn của tôi là Swift Mailer.

+0

Có thực sự có thể cấu hình php.ini để sử dụng một SMTP không cục bộ (như GMail) không ?? Tôi luôn sử dụng sendmail cho việc này. Là nó thực sự có thể KHÔNG gửi sendmail? Nếu có: Ở đâu (trong php.ini) tôi nên đặt tên người dùng, mật khẩu và ssl/tls. Phần [chức năng thư] trong Php.ini không cung cấp những thứ như thế. –

+0

Tôi sử dụng máy chủ Windows.Tùy chọn này hoạt động tốt [chức năng thư] ; Chỉ dành cho Win32. SMTP = mail.yourserver.com smtp_port = 25 auth_username = smtp-username auth_password = smtp-password sendmail_from = [email protected] – Viktor

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