user1599076
user1599076

Reputation: 355

PHP form send email to multiple recipients

I have some PHP code that I'm using to send a form off to a specific e-mail address. However, I'd like to include a couple more e-mail addresses in the PHP for when it sends it. How can I do that?

<?php
if(isset($_POST['email'])) {

    // EDIT THE 2 LINES BELOW AS REQUIRED
    $email_to = "[email protected]";
    $email_subject = "MVP Nomination";


    function died($error) {
        // your error code can go here
        echo "We are very sorry, but there were error(s) found with the form you submitted. ";
        echo "These errors appear below.<br /><br />";
        echo $error."<br /><br />";
        echo "Please go back and fix these errors.<br /><br />";
        die();
    }

    // validation expected data exists
    if(!isset($_POST['username']) ||
        !isset($_POST['body'])||
        !isset($_POST['email'])) {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }

    $username = $_POST['username']; // required
    $body = $_POST['body']; // required
    $email_from = $_POST['email'];         // required

  $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
  if(!preg_match($email_exp,$email_from)) {
    $error_message .= 'The Email Address you entered does not appear to be valid.<br />';
  }
    $string_exp = "/^[A-Za-z .'-]+$/";
  if(!preg_match($string_exp,$username)) {
    $error_message .= 'The Username you entered does not appear to be valid.<br />';
  }

  if(strlen($error_message) > 0) {
    died($error_message);
  }
    $email_message = "Form details below.\n\n";

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
    }

    $email_message .= "Name: ".clean_string($username)."\n";
    $email_message .= "Comments: ".clean_string($body)."\n";


// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);  
}
header("Location: ThankYou.html");  //Redirect to Thank You HTML page after email is sent
?>​

Thank you.

Upvotes: 34

Views: 156247

Answers (9)

Kym NT
Kym NT

Reputation: 790

the $email_to of the php mail can accept multiple email recipients.

you can use implode to your different email to concatenate them using comma ','

if you are using phpmailer you can use explode to separate your string of email address then add them using loop like for each

/** separate each email address */
           $str_arr = explode (",", $recipient);

/** add each email address using addAddress */
           foreach ($str_arr as $email) {
            $mail->addAddress($email); //(recipientEmail, recipientName) - name is optional
            }

it will then look like this when sent

enter image description here

Upvotes: 0

pjehan
pjehan

Reputation: 850

Also if your email addresses are stored in an array:

$emails = ['[email protected]', '[email protected]', '[email protected]'];
$email_to = implode(',', $emails); // "glue" every array elements (emails) with a comma and return a single string "[email protected],[email protected],[email protected]"
@mail($email_to, $email_subject, $email_message, $headers);

This can be useful when you retrieve email addresses from an external data source.

Upvotes: 0

Sourabh Dubey
Sourabh Dubey

Reputation: 406

If these all answers are not working then You can simply use multiple mail function for multiple recipient.

$email_to1 = "[email protected]";
$email_to2 = "[email protected]";

mail($email_to1, $email_subject, $email_message, $headers);  
mail($email_to2, $email_subject, $email_message, $headers);  

Upvotes: 2

deilkalb
deilkalb

Reputation: 443

Make sure you concatenate the multiple emails with ',' instead of ';'

Upvotes: 1

MTranchant
MTranchant

Reputation: 485

If you need to add emails as CC or BCC, add the following part in the variable you use as for your header :

$headers .= "CC: [email protected]".PHP_EOL;
$headers .= "BCC: [email protected]".PHP_EOL;

Regards

Upvotes: 10

virenpatel111
virenpatel111

Reputation: 201

Use comma separated values as below.

$email_to = 'Mary <[email protected]>, Kelly <[email protected]>';
@mail($email_to, $email_subject, $email_message, $headers);

or run a foreach for email address

//list of emails in array format and each one will see their own to email address
$arrEmail = array('Mary <[email protected]>', 'Kelly <[email protected]>');

foreach($arrEmail as $key => $email_to)
    @mail($email_to, $email_subject, $email_message, $headers);

Upvotes: 13

Marcin Orlowski
Marcin Orlowski

Reputation: 75635

You can add your receipients to $email_to variable separating them with comma (,). Or you can add new fields to headers, namely CC: or BCC: and put your receipients there. BCC is most recommended

Upvotes: 5

iLaYa  ツ
iLaYa ツ

Reputation: 4017

If i understood correct try this one

$headers = "Bcc: [email protected]";

or

$headers = "Cc: [email protected]";

Upvotes: 3

Gung Foo
Gung Foo

Reputation: 13568

This will work:

$email_to = "[email protected],[email protected],[email protected]";

Upvotes: 97

Related Questions