2012-01-09 34 views
5

Tôi hiện đang sử dụng tập lệnh sử dụng file_get_contents để lấy nội dung của tệp php và sau đó gửi nó bên trong email đến danh sách khách hàng. Tôi muốn thay đổi tập lệnh để cho phép dự phòng văn bản thuần túy nhằm giảm nguy cơ bị đánh dấu là spam.Gửi bản tin HTML với dự phòng thuần văn bản

Đây là kịch bản tôi có vào lúc này:

function sendit($to,$subject,$body) 
{ 
$headers = "To: <{$to}>\n". 
        "From: Test Newsletter Admin <[email protected]>\n". 
        "Reply-To: Test Newsletter Admin <[email protected]>\n". 
        "MIME-Version: 1.0\n". 
        "Content-Type: text/html; charset=ISO-8859-1\n"; 

    $mail_sent = @mail($to, $subject, $body, $headers); 
    return $mail_sent; 
} 
$content = file_get_contents('attach/newsletter.php'); 
//require_once('../../func.php'); 
set_time_limit(0); 
date_default_timezone_set('Europe/London'); 

$log = fopen('send'.date('dmY',time()).'.log','wb'); 

//$array = file('NonCustClean.txt'); 
$array = file('devaddresses.txt'); 
// Delay In Seconds between emails (must be INT) 
$delay = 10; 
$count = count($array); 

$end = time()+ ($delay*$count); 

echo "Start Time: ".date('d/m/Y H:i:s',time()).'<br />'; 
echo "Estimated End Time: ".date('d/m/Y H:i:s',$end).'<br />'; 
echo "(".dateDiff(time(),$end).")<br />"; 

foreach ($array as $email) 
{ 

$status = (sendit(trim($email), 'Test Newsletter',$content))?'Sent':'failed'; 
fwrite($log,date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."\n"); 
echo date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."</br>"; 
flush(); 
    sleep(10); 
} 

Newsletter.php chỉ chứa mã HTML/CSS cơ bản.

Có thể ai đó vui lòng tư vấn cách tôi có thể thay đổi tập lệnh này để đi kèm với dự phòng thuần văn bản không?

Cảm ơn bạn đã được trợ giúp.

+0

Bạn đã nghĩ về việc sử dụng một thư viện như [Swiftmailer] (http://swiftmailer.org/)? Câu trả lời này (http://stackoverflow.com/a/29345590/987864) mô tả việc gửi HTML và văn bản thuần tuý dễ dàng như thế nào. – Daan

Trả lời

5

gì bạn đang tìm kiếm được gọi là một e-mail nhiều phần dữ liệu. Nội dung của nó chứa cả HTML và văn bản, được phân cách bởi một "ranh giới". Sau đó, ứng dụng thư điện tử sẽ tự xác định xem nó có hiển thị phiên bản HTML hoặc Văn bản của thư hay không, dựa trên các khả năng và tùy chọn của người dùng.

Một ví dụ về cách bạn có thể thiết lập này (source):

$notice_text = "This is a multi-part message in MIME format."; 
$plain_text = "This is a plain text email.\r\nIt is very cool."; 
$html_text = "<html><body>This is an <b style='color:purple'>HTML</b>" . 
      "text email.\r\nIt is very cool.</body></html>"; 

$semi_rand = md5(time()); 
$mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand"; 
$mime_boundary_header = chr(34) . $mime_boundary . chr(34); 

$to = "Me <[email protected]>"; 
$bcc = "You <[email protected]>, Them <[email protected]>"; 
$from = "Me.com <[email protected]>"; 
$subject = "My Email"; 

$body = "$notice_text 

--$mime_boundary 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$plain_text 

--$mime_boundary 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$html_text 

--$mime_boundary--"; 

if (@mail($to, $subject, $body, 
    "From: " . $from . "\n" . 
    "bcc: " . $bcc . "\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "  boundary=" . $mime_boundary_header)) 
    echo "Email sent successfully."; 
else 
    echo "Email NOT sent successfully!"; 
+0

Tôi đã thử điều này và email đã kết thúc trong thư mục spam. http://www.mail-tester.com/ nói 'Thư là 10% đến 20% HTML obfuscation'. Hơn nữa nó nói rằng tôi không được phép gửi thư từ địa chỉ email được chỉ định. – erdomester

0

Bạn nên sửa đổi

Content-Type: text/html; charset=ISO-8859-1\n 

Để biết thêm infos, hãy kiểm tra này site

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