2017-02-09 15 views
0

テンプレートシステムをほとんど使用せずに複数のメールを送信したいと思います。私は自分自身を試みるが、すべてがうまくいくわけではない。私はそれがOK送るそれらの電子メールを送信しようとすると、私はこのテンプレートPHPMailer - テンプレートシステムを使用して複数のメールを送信する

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> 
    <title>new email template</title> 
</head> 
<body> 
<div style="width: 640px; font-family: Arial, Helvetica, sans-serif; font-size: 11px;"> 


    <div align="center"> 
    Hi, 
    <p> I would like to send at your email {email}</p> 
    <p> a little hash sum {hash}</p> 
    </div> 

</div> 
</body> 
</html> 

そして、私のphpmailerの断片(アップは私のメールアカウント用に設定された)

$mail->Subject = "Mail sending template"; 

$recipients = array(
    '[email protected]' => 'gfsggsfg5t653rwtwrwtwrt', 
    '[email protected]' => '6536536536356363636536356', 

); 

foreach($recipients as $email => $hash) { 

    $mail->addAddress($email); 

    $vars = array('{email}','{hash}'); 
    $values = array($email,$hash); 

    $body = str_replace($vars,$values,$body); 
    $mail->msgHTML($body); 
    $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 
    if (!$mail->send()) { 
     echo "Mailer Error (" . str_replace("@", "&#64;", $email) . ') ' . $mail->ErrorInfo . '<br />'; 
     break; 
    } else { 
     echo "Send ok for: :" .$email . ' (' . str_replace("@", "&#64;", $email) . ')<br />'; 

    } 

    $mail->clearAddresses(); 
    $mail->clearAttachments(); 
} 

を持っています。私は電子メールを受け取ることができますが、すべて同じデータを持っています:$ recipments([email protected])の最初の「行」から。 From [email protected]私はメールを受け取ることができますが、[email protected]から{email}と{hash}です。

どういうところが間違っていますか?助けのための

感謝:)

答えて

0

単純なミス:あなたがループの前$bodyどこかにあなたの元のテンプレートをロードしているが、ループ内であなたが行って代替品との$bodyを上書きしているので、周りの次回ループすると、プレースホルダはもう存在しません。これは動作するはずです:

$mail->Subject = "Mail sending template"; 

$recipients = array(
    '[email protected]' => 'gfsggsfg5t653rwtwrwtwrt', 
    '[email protected]' => '6536536536356363636536356', 

); 

foreach($recipients as $email => $hash) { 

    $mail->addAddress($email); 

    $vars = array('{email}','{hash}'); 
    $values = array($email,$hash); 

    $body2 = str_replace($vars,$values,$body); 
    $mail->msgHTML($body2); 
    $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; 
    if (!$mail->send()) { 
     echo "Mailer Error (" . str_replace("@", "&#64;", $email) . ') ' . $mail->ErrorInfo . '<br />'; 
     break; 
    } else { 
     echo "Send ok for: :" .$email . ' (' . str_replace("@", "&#64;", $email) . ')<br />'; 

    } 

    $mail->clearAddresses(); 
    $mail->clearAttachments(); 
} 
+0

をはい、私はあなたが:)私はループにのfile_get_contents機能を追加する必要があります:) – Arlid

+0

あなたがする必要はありません入力まさにそれ何。ループの前に一度テンプレートを読んで再利用してください。私が投稿したコードはそうです。 – Synchro

関連する問題