2012-01-09 40 views
5

私は現在、file_get_contentsを使用してPHPファイルの内容を取得し、顧客のリストに電子メールで送信するスクリプトを使用しています。スパムとしてマークされるリスクを軽減するためにプレーンテキストのフォールバックを許可するようにスクリプトを変更したいと思います。プレーンテキストのフォールバックを使用したHTMLニュースレターの送信

これは現時点で私が持っているスクリプトです:

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だけで、基本的なHTML/CSSのコードが含まれています。

誰かが、プレーンテキストのフォールバックに同行するようにこのスクリプトを変更する方法を教えてください。

ありがとうございました。

+0

あなたは[ではSwiftMailer](http://swiftmailer.org/)のようなライブラリを使用して考えたことはありますか?この[answer](http://stackoverflow.com/a/29345590/987864)では、HTMLとプレーンテキストメールの送信が簡単に説明されています。 – Daan

答えて

5

あなたはマルチパートメールとして知られて探しているものを確認してください変更する必要があります。本文には、HTMLとテキストの両方が含まれ、いわゆる「境界」で区切られています。電子メールクライアントは、その機能とユーザーの好みに基づいて、メールのHTMLまたはテキストバージョンを表示するかどうかを判断します。

たとえば、あなたが(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

私はこれを試して、電子メールは迷惑メールフォルダに閉じ込められました。 http://www.mail-tester.com/では、「メッセージは10%〜20%のHTML難読化」となっています。さらに、私は、指定された電子メールアドレスからメールを送信することは許可されていないと言います。 – erdomester

0

あなたは

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

はもっとに関する情報については、このsite

関連する問題