【问题标题】:Php mail $headers break functionphp邮件$headers中断功能
【发布时间】:2013-11-25 06:59:51
【问题描述】:

我有一个功能,可以根据在 oscommerce 中购买的产品数量发送多封电子邮件。在我为函数的 php mail() 部分添加标题之前,它工作得很好。正如你在下面看到的,我的标题是:

    $headers .= 'MIME-Version: 1.0' . "\r\n";  
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    $headers .= "From: info@email.com \r\n" .  
           "Reply-To: info@email.com \r\n" .  
           "X-Mailer: PHP/" . phpversion();

但是当我声明标题(我需要它以将电子邮件作为 html 发送)时,只发送第一封电子邮件。我不能多次发送标头吗?任何建议将不胜感激!

函数sn-p:

foreach ($dstToProduct as $dsid => $productIndices) {
    $email = $newDropships[$dsid]['email'];
    $subject = "A new order has been placed";
    $headers .= 'MIME-Version: 1.0' . "\r\n";  
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  

    $headers .= "From: info@email.com \r\n" .  
           "Reply-To: info@email.com \r\n" .  
           "X-Mailer: PHP/" . phpversion();




    // Build message text
    $date = date('m/d/Y');

    $text = '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>';

    foreach ($productIndices as $productIndex) {

            $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>';

    }

        $text .= '</table>';


    if (!mail($email, $subject, $text, $headers)) {
        mail('info@email.com', 'Error sending product', 'The following order was not sent:&nbsp;' . $order_id);
    }

}
}

【问题讨论】:

  • 您收到任何错误(在发送第一封邮件后)?
  • 没有错误被抛出,我在错误日志中也找不到任何东西。似乎它只是停止循环

标签: php email content-type oscommerce


【解决方案1】:

试试这个:

$subject = "A new order has been placed";
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
$headers .= 'From: Info <info@email.com>' . "\r\n";
$headers .= 'Reply-To: Info <info@email.com>' . "\r\n";
$headers .=  "X-Mailer: PHP/".phpversion();   
$date = date('m/d/Y');
foreach ($dstToProduct as $dsid => $productIndices) 
{
 $email = $newDropships[$dsid]['email'];
 $text = '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>';

  foreach ($productIndices as $productIndex) {

  $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>';

  }
 $text .= '</table>';
 if (!mail($email, $subject, $text, $headers)) {
    mail('info@email.com', 'Error sending product', 'The following order was not sent:&nbsp;' . $order_id);
}

}

【讨论】:

    【解决方案2】:

    如果您认为 phpversion() 会引发问题,请尝试以下操作:

        $phpV =  phpversion();
        $subject = "A new order has been placed";
        $headers .= 'MIME-Version: 1.0' . "\r\n";  
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
        $headers .= "From: info@email.com \r\n" .  
                    "Reply-To: info@email.com \r\n" .  
                    "X-Mailer: PHP/" .$phpV; 
    

    通常,您不需要每次都这样做,非特定用户的变量取决于 - 您可以声明一次。像这样:

    $subject = "A new order has been placed";
    $headers .= 'MIME-Version: 1.0' . "\r\n";  
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
    
    $headers .= "From: info@email.com \r\n" .  
           "Reply-To: info@email.com \r\n" .  
           "X-Mailer: PHP/" . phpversion();
    
    $date = date('m/d/Y');
    
    $text = '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>';
    foreach ($productIndices as $productIndex) {
        $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' 
        . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">'
        . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' 
        . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">'
        . $products_array[$productIndex]["price"] . '</td></tr>';
    }
    $text .= '</table>';
    
    foreach ($dstToProduct as $dsid => $productIndices) {
        $email = $newDropships[$dsid]['email'];
        if (!mail($email, $subject, $text, $headers)) {
            mail('info@email.com', 'Error sending product', 'The following order was not sent: ' . $order_id);
        }
    

    【讨论】:

      【解决方案3】:

      你可以这样试试

      希望它对你有用...

       <?php
          $headers=array(
              'MIME-Version: 1.0' . "\r\n",
              'From: info@email.com',
              'Content-Type:text/html',
              'Reply-To: info@email.com'
          );
          $subject = "A new order has been placed";
      
          foreach ($dstToProduct as $dsid => $productIndices) {
              $email = $newDropships[$dsid]['email'];
      
      
          // Build message text
              $date = date('m/d/Y');
      
              $text = '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>';
      
              foreach ($productIndices as $productIndex) {
      
              $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>';
      
              }
      
              $text .= '</table>';   
              $body = $text;
      
      
          if (!mail($email,$subject,$body,implode("\r\n",$headers))) {
                  mail('info@email.com', 'Error sending product', 'The following order was not sent:&nbsp;' . $order_id);
              }
      
      
          }
      

      【讨论】:

        【解决方案4】:

        你的 $headers 正在与循环合并,试试这个。我相信它会起作用的:

        foreach ($dstToProduct as $dsid => $productIndices) {
            $email = $newDropships[$dsid]['email'];
            $subject = "A new order has been placed";
        
            $headers = ""; 
        
            $headers .= 'MIME-Version: 1.0' . "\r\n";  
            $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
        
            $headers .= "From: info@email.com \r\n" .  
                   "Reply-To: info@email.com \r\n" .  
                   "X-Mailer: PHP/" . phpversion();
        
        
        
        
            // Build message text
            $date = date('m/d/Y');
        
            $text = '<table cellpadding="3" style="margin-top: 20px;"><tr style="background-color: #6d7d59; color: #ffffff; font-weight: bold; font-size: 12px;"><td style="width: 240px; vertical-align:text-top;">Product Name</td><td style="width: 120px; vertical-align:text-top;">Model Number</td><td style="width: 80px; vertical-align:text-top;">Quantity</td><td style="width: 80px; vertical-align:text-top;">Price</td></tr>';
        
            foreach ($productIndices as $productIndex) {
        
                    $text .= '<tr style="background-color: #f0f0f0; color: #513311; font-size: 12px;"><td style="vertical-align:text-top;">' . $products_array[$productIndex]["text"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["model"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["qty"] . '</td><td style="vertical-align:text-top;">' . $products_array[$productIndex]["price"] . '</td></tr>';
        
            }
        
                $text .= '</table>';
        
        
            if (!mail($email, $subject, $text, $headers)) {
                mail('info@email.com', 'Error sending product', 'The following order was not sent:&nbsp;' . $order_id);
            }
        
        }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-02-27
          • 1970-01-01
          • 2023-03-21
          • 2015-02-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-12
          • 1970-01-01
          相关资源
          最近更新 更多