【问题标题】:Send email from addresses stored in mysql database to multiple recipients从存储在 mysql 数据库中的地址向多个收件人发送电子邮件
【发布时间】:2016-05-22 00:22:50
【问题描述】:

在下面的示例中,如果我取消注释 $emailList 则发送电子邮件。来自数据库的回显显示“email1@yahoo.com,email2@yahoo.com”

如果我在数据库中只保留一个地址,它也可以工作。不确定地址之间的逗号是否导致问题。我不确定为什么现在发送的电子邮件中包含多个地址的数据库中的信息。

$emailId = mysql_query("Select * from email_group WHERE id = 1");
while($rowEmail = mysql_fetch_assoc($emailId))
{
$emailList = $rowEmail['email']; 
} 

// the message
$msg = "Test Message";

// use wordwrap() if lines are longer than 70 characters
$msg = wordwrap($msg,70);

echo $emailList;
//$emailList = "email1@yahoo.com,email2@yahoo.com";

// send email
mail($emailList,"Test Subject",$msg); 

【问题讨论】:

  • 删除$emailList = "email1@yahoo.com,email2@yahoo.com,";的最后一个逗号并尝试
  • 这是您的实际代码吗?因为据我所知,每次运行 while 循环时,您的 $emailList 将被最后一封电子邮件覆盖,并且不包含循环中以前的值。
  • 是的,实际代码。我每个 id 只有一个电子邮件地址列表

标签: php mysql


【解决方案1】:

通过使用您的代码$emailList = "email1@yahoo.com,email2@yahoo.com,";

问题是最后一个逗号。这会在代码上添加一个额外的逗号,例如,

mail(email1@yahoo.com,email2@yahoo.com,,"Test Subject",$msg); 

// Which leads to an error.

因此,使用代码从电子邮件字符串中删除最后一个逗号,

$emailList = rtrim($emailList, ",");

现在$emailList 就像,

$emailList = "email1@yahoo.com,email2@yahoo.com";

另一种方法

展开邮件列表,一一发送。喜欢,

$email_ids = explode(",",$emailList);

foreach($email_ids as $email){
  mail($email,"Test Subject",$msg); 
}

【讨论】:

  • 不用foreach也可以发邮件
  • @SantoshPillai 删除最后来自$emailList = "email1@yahoo.com,email2@yahoo.com,";
【解决方案2】:

你可以试试这个

$emailId = mysql_query("Select * from email_group WHERE id = 1");

$emailList = [];
while($rowEmail = mysql_fetch_assoc($emailId))
{
$emailList[] = $rowEmail['email']; 
} 

// the message
$msg = "Test Message";

// use wordwrap() if lines are longer than 70 characters
$msg = wordwrap($msg,70);

// send email
mail(implode(", ", $emailList),"Test Subject",$msg); 

【讨论】:

    【解决方案3】:

    您所要做的只是修剪您的电子邮件地址,因为它在字符串末尾有一个逗号。所以试试这个。

    $emailId = mysql_query("Select * from email_group WHERE id = 1");
    while($rowEmail = mysql_fetch_assoc($emailId))
    {
    $emailList = $rowEmail['email']; 
    } 
    
    // the message
    $msg = "Test Message";
    
    // use wordwrap() if lines are longer than 70 characters
    $msg = wordwrap($msg,70);
    
    echo $emailList = rtrim($emailList, ",");
    //$emailList = "email1@yahoo.com,email2@yahoo.com";
    
    // send email
    mail($emailList,"Test Subject",$msg);
    

    【讨论】:

      【解决方案4】:

      试试这个:

      <?php
      $emailId = mysql_query("Select * from email_group WHERE id = 1");
      while($rowEmail = mysql_fetch_assoc($emailId))
      {
          $emailList[] = $rowEmail['email'];
      }
      
      // the message
      $msg = "Test Message";
      // use wordwrap() if lines are longer than 70 characters
      $msg = wordwrap($msg,70);    
      if(!empty($emailList)) {
          $emails = implode(',',$emailList);
          // send email
          mail($emails,"Test Subject",$msg);
      }
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        相关资源
        最近更新 更多