【问题标题】:PHP send mail to multiple email addressesPHP 将邮件发送到多个电子邮件地址
【发布时间】:2010-12-22 04:08:49
【问题描述】:

我应该在这个 PHP 脚本中更改哪些代码以将一封电子邮件发送到 20 多个电子邮件地址

<?php

$email_to = "youremailaddress@yourdomain.com"; // your email address
$email_subject = "Contact Form Message"; // email subject line
$thankyou = "thankyou.htm"; // thank you page

?>

请给我一个例子。谢谢。

【问题讨论】:

  • 很遗憾没有人再看手册了。
  • Stackoverflow 是手册
  • 手册和文档对于深入研究非常有用且相关。但是,如果您需要特定但常见用例的答案,谷歌搜索和 StackOverflowing 通常会更快;特别是如果它可以以推文的大小或单个显示器的高度呈现。我希望手册能够灵活地提供两者。
  • @AlecSmart:很遗憾,许多手册写得如此糟糕以至于几乎无法使用。

标签: php forms


【解决方案1】:

为了代码的可读性,使用数组并将其内爆为逗号分隔的字符串:-

$recipients = array(
  "youremailaddress@yourdomain.com",
  // more emails
);
$email_to = implode(',', $recipients); // your email address
$email_subject = "Contact Form Message"; // email subject line
$thankyou = "thankyou.htm"; // thank you page

【讨论】:

  • 如果收件人不(或不应该)彼此认识,请不要这样做。这样每个地址都会暴露给每个收件人。
【解决方案2】:

你的

$email_to = "address@one.com, address@two.com, address@three.com"

需要以逗号分隔的电子邮件地址列表。

mail($email_to, $email_subject, $thankyou);

【讨论】:

  • 为什么逗号后面要加空格?而不是 .com,例如地址?
  • @Jon,我建议逗号后的空格有助于提高可读性
【解决方案3】:

只需用逗号分隔它们,例如$email_to = "youremailaddress@yourdomain.com, emailtwo@yourdomain.com, John Doe &lt;emailthree@example.com&gt;"

【讨论】:

    【解决方案4】:

    以下代码将完成任务....

    <?php
    
    $contacts = array(
    "youremailaddress@yourdomain.com",
    "youremailaddress@yourdomain.com",
    //....as many email address as you need
    );
    
    foreach($contacts as $contact) {
    
    $to      =  $contact;
    $subject = 'the subject';
    $message = 'hello';
    mail($to, $subject, $message, $headers);
    
    }
    
    ?>
    

    【讨论】:

    • 请注意,您没有包含 $headers 的 var,而且如果您将其放入循环中,它将在每封邮件中多次出现。
    • 与之前向群组发送一封电子邮件的回复不同,此建议将发送多封电子邮件,每个收件人一封。鉴于原始请求的模糊性,任何一个响应都可能是正确的。请注意,正如@Paul Spiegel 指出的那样,在“收件人”字段中发送群组电子邮件是一种不好的形式。首选密件抄送。
    【解决方案5】:

    类似这样的:

    mail("john@doe.com , marry@mail.com , frank@domain.com", "Test e-mail", "Hi, this is a test message!");
    

    http://myphpform.com/php-form-multiple-recipients.php

    【讨论】:

      【解决方案6】:

      将所有电子邮件地址发送给所有收件人是非常糟糕的做法;您应该使用密件抄送(密件抄送)。

          $from = "myname@mymail.com";
          $recipList = "mailaddress1,mailaddress2,etc";
          $headers = "MIME-Version: 1.0\nContent-type: text/html; charset=utf-8\nFrom: {$from}\nBcc: {$recipList}\nDate: ".date(DATE_RFC2822);
          mail(null,$subject,$message,$headers); //send the eail
      

      【讨论】:

      • 密件抄送并没有真正向任何人隐藏任何东西。您需要做的就是查看标题,您仍然知道所有的电子邮件地址
      【解决方案7】:
          $recipients = "test1@test.com,test2@test.com,test3@test.com,test1@test.com";
          $email_array = explode(",",$recipients);
          foreach($email_array as $email)
          {
              echo $to      =  $email;
              $subject = 'the subject';
              $message = 'hello';
             $headers = 'From: webmaster@example.com' . "\r\n" .
             'Reply-To: webmaster@example.com' . "\r\n" .
              'X-Mailer: PHP/' . phpversion();
              mail($to, $subject, $message, $headers);
      
          }
      

      【讨论】:

        【解决方案8】:

        最好的方法是将所有电子邮件保存在数据库中。

        假设您的电子邮件在数据库中,您可以尝试此代码

        /*Your connection to your database comes here*/
        $query="select email from yourtable";
        $result =mysql_query($query);
        

        /上述代码取决于您保存电子邮件地址的位置,因此请确保将其替换为您的参数/

        然后你可以从结果中制作一个逗号分隔的字符串,

        while($row=$result->fetch_array()){
                if($rows=='')    //this prevents from inserting comma on before the first element
                $rows.=$row['email'];
                else
                $rows.=','.$row['email'];
            }
        

        现在你可以使用

        $to = explode(',',$rows); // to change to array
        
        $string =implode(',',$cc); //to get back the string separated by comma
        

        使用上面的代码,您可以像这样发送电子邮件

        mail($string, "Test", "Hi, Happy X-Mas and New Year");
        

        【讨论】:

        • 你为什么不直接将受感染的电子邮件放入一个数组中,然后在调用mail 之前将implode 放入?
        • 是的,没错。我做了两次同样的事情来展示explode()中发生了什么
        【解决方案9】:

        在邮件功能中,您可以使用逗号分隔的 $emailto 参数中的任意多个收件人。

        【讨论】:

          【解决方案10】:

          试试这个。它对我有用。

          $to = $email1 .','. $email2 .','. $email3;
          

          【讨论】:

            【解决方案11】:

            这对我有用,

            $recipient_email = 'sales@abc.com,support@xyz.com';
            
            $success = mail($recipient_email, $subject, $body, $headers);
            

            【讨论】:

              【解决方案12】:

              你可以写多个你想发送的电子邮件地址并将其作为第一个参数传递。 示例:-

              mail("FirstEmailId@ABC.com, SecondEmilId@XYZ.com","Subject","Message","From: EmailId@PQR.com");
              

              【讨论】:

                【解决方案13】:

                我认为下面的代码会起作用。

                $tos = array('address1@yourdomain.com', 'address2@yourdomain.com');
                foreach ($tos as $to){
                    $ok = mail ($to, $subject, $body, $from);
                }
                if ($ok) {
                    echo "Message Send";
                } else { 
                    echo "Error";
                }
                

                【讨论】:

                • 值得注意的是,此示例将同一电子邮件的多个副本发送...而不是将同一电子邮件发送给多个收件人。
                • 这种方式只检查if中的最后一封邮件。您应该将 if..else 块放入循环中
                【解决方案14】:

                以编程方式将提交的表单发送到多个电子邮件地址是可能的,但最好的做法是创建一个邮件列表。在代码上将放置列表地址,并且可以在不更改代码的情况下对收件人列表的电子邮件地址进行任何更改或更新。

                【讨论】:

                • 你没有回答这个问题。更多给予生活建议。但是如果不知道具体用途,就很难知道最佳实践是什么
                猜你喜欢
                • 1970-01-01
                • 2017-04-02
                • 2017-10-17
                • 2019-01-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-10-24
                • 1970-01-01
                相关资源
                最近更新 更多