【问题标题】:Missing message text while looping PHPMailer循环PHPMailer时缺少消息文本
【发布时间】:2017-05-19 03:12:18
【问题描述】:

这是我的代码:

// $mail->addReplyTo('noreply@pbrx.co.id', 'No Reply');
$subjectTo = explode(';', $Addres);
//var_dump($Addres);
array($subjectTo);
// var_dump(array($subjectTo));
foreach ($subjectTo as $key => $value) {
    // $mail->isSMTP();     
    $mail->Protocol = 'smtp';
    $mail->Host = '192.168.40.220';
    $mail->Port = 25;
    $mail->SMTPDebug  = false;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->From = 'noreply1@pbrx.co.id';
    $mail->FromName = 'Notes Email';
    $mail->addAddress($value);

    $subject = $supplier.' have sent NOTES FROM PO - '.$PO;
    if(substr($PO,-1)=='L'){
        $message = "Dear Purchasing,\nYou have NOTES from ".$supplier." with PO : ".$PO."\n Here the list :";               
    }else{
        $message = "Dear Merchandiser,\nYou have NOTES from ".$supplier." with PO : ".$PO."\n Here the list :";             
    }

    $nomor = 1;
    //var_dump($tbl_note->fetch_assoc());
    while ($val = $tbl_note->fetch_assoc()) {
        $message .= "\n".$nomor.". ITEM :".$val['itemdesc']." ( ".$val["matcontents"]." ) COLOR/SIZE :".$val['colorcode']."/".$val['size']." notes : ".$val['PIReason'];
        $nomor = $nomor + 1;
    }

    $mail->Subject = $subject;
    $mail->Body = $message ;
}

如果我只使用 1 个地址,则消息显示如下:

亲爱的采购,
您有来自 COATS REJO INDONESIA 的 PO : NORT170283-014950-L
这里是列表:
1. 商品:EMB THREAD TEX 18 DRYVENT LOGO (KXON) 颜色/尺寸:沥青灰/SYLCO TEX 18 注释

但如果我使用多个这样的电子邮件:usera@email.com;userb@email.com 我会收到:

亲爱的采购,
您有来自 COATS REJO INDONESIA 的 PO : NORT170283-014950-L
这里是列表:

在同一po 中没有项目。我在循环消息时做错了吗?

感谢 mickmackusa, 所以我试试这个 我在 foreach 之前更改位置循环我的列表项,并在循环我的列表项时进行变量化。最后我在 foreach 中使用了 ny 变量循环。和工作。 这里是我更改的代码:

// $mail->addReplyTo('noreply@pbrx.co.id', 'No Reply');
    $subjectTo = explode(';', $Addres);
    //var_dump($Addres);
    array($subjectTo);
    // var_dump(array($subjectTo));             
        $nomor = 1;
        //var_dump($tbl_note->fetch_assoc());
        while ($val = $tbl_note->fetch_assoc()) {
            $listitem .= "\n".$nomor.". ITEM :".$val['itemdesc']." ( ".$val["matcontents"]." ) COLOR/SIZE :".$val['colorcode']."/".$val['size']." notes : ".$val['PIReason'];
            $nomor = $nomor + 1;
        }
    foreach ($subjectTo as $key => $value) {
        // $mail->isSMTP();     
        $mail->Protocol = 'smtp';
        $mail->Host = '192.168.40.220';
        $mail->Port = 25;
        $mail->SMTPDebug  = false;
        $mail->SMTPSecure = 'tls';
        $mail->SMTPAuth = true;
        $mail->From = 'noreply1@pbrx.co.id';
        $mail->FromName = 'Notes Email';
        $mail->addAddress($value);

        $subject = $supplier.' have sent NOTES FROM PO - '.$PO;
        if(substr($PO,-1)=='L'){
            $message = "Dear Purchasing,\nYou have NOTES from ".$supplier." with PO : ".$PO."\n Here the list :";               
        }else{
            $message = "Dear Merchandiser,\nYou have NOTES from ".$supplier." with PO : ".$PO."\n Here the list :";             
        }
        $message .= $listitem;

        $mail->Subject = $subject;
        $mail->Body = $message ;
    }

【问题讨论】:

  • 查看 PHPMailer 提供的邮件列表示例。它展示了如何有效地进行这种发送。
  • @Synchro :好吧,我尝试在 foreach 之前使用循环我的列表,然后我在循环我的列表时使用 imake 变量并在 foreach 中使用该变量。并且是工作:)

标签: php email concatenation phpmailer multiple-resultsets


【解决方案1】:

当您进行多次迭代时,在您的 while 循环之前使用 mysqli_data_seek($tbl_note,0); 来重置指针。

更好的做法是从结果集中构建您的 list 消息部分,并将该文本设置为循环之外的变量(我不知道您的查询在哪里——它不在您的代码中)然后使用循环内的该变量以连接消息。

【讨论】:

  • 好吧,我尝试在 foreach 之前循环我的列表,并在里面设置变量,就像你的 siad 一样,并且是工作。 Tq :)
猜你喜欢
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多