2013-01-23 41 views
7

Để làm cho cuộc sống khó khăn, khách hàng tôi đang làm việc đang sử dụng một hệ thống thực sự lớn nhưng cũ chạy trên PHP4.0 và không muốn thêm bất kỳ thư viện bổ sung nào.Sử dụng thư() để gửi tệp đính kèm VÀ văn bản/html trong email trong PHP4

Tôi đang cố gắng gửi email thông qua PHP với cả tệp đính kèm và nội dung văn bản/html đi kèm nhưng tôi không thể gửi cả hai trong một email.

này gửi tập tin đính kèm:

$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\""; 
$output = $attachment; 

mail($emailTo, $emailSubject, $output, $headers); 

này gửi văn bản/html:

$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n"; 
$output = $emailBody; // $emailBody contains the HTML code. 

này gửi một tập tin đính kèm có chứa các text/html cùng với các nội dung tập tin đính kèm:

$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n".$emailBody."\r\n"; 
$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\""; 
$output = $attachment; 

Điều tôi cần biết là làm cách nào để gửi email có văn bản/html trong nội dung email và cũng có thể thêm tệp đính kèm vào đó. Tôi chắc rằng tôi đang thiếu một cái gì đó thực sự đơn giản ở đây!

Xin cảm ơn trước.

+1

Tìm kiếm gửi email 'nhiều'. [Một ví dụ ở đây] (http://kevinjmcmahon.net/articles/22/html-and-plain-text-multipart-email-/). Ví dụ này có một phần văn bản/html và văn bản/đồng bằng, nhưng bạn sẽ có thể điều chỉnh nó theo nhu cầu của bạn. – RikkusRukkus

+0

Nếu bạn có thể cập nhật PHP. PHP4 chỉ là quá cũ và như xa như tôi được thông báo không được duy trì nữa - vì vậy thậm chí không sửa chữa bảo mật sẽ được thực hiện cho chi nhánh PHP4. Bản cập nhật PHP4 cuối cùng được đưa ra vào năm 2008! –

+3

Hoàn toàn thẳng thắn, nếu một khách hàng nói với tôi "Tôi đang sử dụng PHP 4.0 và tôi không chuẩn bị nâng cấp", tôi sẽ nói với họ rằng tôi không chuẩn bị làm việc cho dự án của họ. – SDC

Trả lời

14

được rồi, cuối cùng tôi đã nứt nó để tham khảo:

$emailBody .= "<html><body>Blah</body></html>"; 
$emailSubject = "Subject"; 
$emailCSV = "\"Col1\", \"Col2\"\r\n"; // etc. 
$attachment = $emailCSV; 

$boundary = md5(time()); 

$header = "From: Name <[email protected]>\r\n"; 
$header .= "MIME-Version: 1.0\r\n"; 
$header .= "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\r\n"; 

$output = "--".$boundary."\r\n"; 
$output .= "Content-Type: text/csv; name=\"result.csv\";\r\n"; 
$output .= "Content-Disposition: attachment;\r\n\r\n"; 
$output .= $attachment."\r\n\r\n"; 
$output .= "--".$boundary."\r\n"; 
$output .= "Content-type: text/html; charset=\"utf-8\"\r\n"; 
$output .= "Content-Transfer-Encoding: 8bit\r\n\r\n"; 
$output .= $emailBody."\r\n\r\n"; 
$output .= "--".$boundary."--\r\n\r\n"; 

mail($emailTo, $emailSubject, $output, $header); 
2

Cố gắng gửi tệp đính kèm bằng cách sử dụng hàm PHP mail() là một bài tập trong sự thất vọng; Nói một cách đơn giản, nó không đáng để nỗ lực. Tôi sẽ không bao giờ bao giờ đề xuất thậm chí thử nó, ngay cả trong các phiên bản PHP hiện tại. Tôi sẽ luôn sử dụng một thư viện như phpMailer.

Tôi biết bạn đã nói bạn không được phép sử dụng thư viện của bên thứ ba, nhưng trong trường hợp này, bạn sẽ bị điên khi không sử dụng. Chúng ta đang nói về sự khác biệt giữa một ngày làm việc và một năm; đó là một thỏa thuận lớn. Chức năng PHP mail() cực kỳ khó để làm việc và cố gắng viết mã với nó để gửi các tệp đính kèm từ đầu sẽ khiến bạn có mã dễ bị lỗi, mất thời gian để làm việc đáng tin cậy trong mọi trường hợp. Đây là lý do tại sao các thư viện như phpMailer tồn tại. Vì vậy, tôi đề nghị rằng bất kể họ muốn bạn làm gì, bạn nên tải xuống phpMailer - phiên bản PHP4 vẫn có sẵn - và xem liệu nó có phù hợp với bạn hay không. Không cần phải làm như vậy. (Trang tải xuống thậm chí còn có thực sự là phiên bản cũ, vì vậy bạn sẽ có thể quay lại đủ thời gian để tìm phiên bản hoạt động với PHP 4.0. Bạn không nên mất chút thời gian để tải bản trình diễn đơn giản làm cho nó hoạt động tốt, có thể làm mềm lập trường của chúng đối với các thư viện của bên thứ ba

(Nếu nó không làm dịu lập trường của chúng, thì không có nhiều hy vọng dự án này được hoàn thành trong một sane . số lượng thời gian trong trường hợp đó, tốt nhất bạn có thể làm là thêm một vài số không thêm để báo giá của bạn với mức giá dự án và grit răng)

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