2012-10-03 162 views
24

我有一些PHP代码,我正在使用将表格发送到特定的电子邮件地址。不过,我希望在PHP中包含更多的电子邮件地址以用于发送它。我怎样才能做到这一点?PHP表单发送电子邮件给多个收件人

<?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._%-][email protected][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 
?>​ 

谢谢。

+0

使用http://codepad.viper-7.com的PHP代码一个foreach。 – Leri

+1

@PLB - StackOverflow的代码特性非常适合这一点。没有理由使用外部网站。 – Buggabill

+0

您在询问之前是否尝试过搜索? http://stackoverflow.com/search?q=php+multiple+email+addresses+ – Buggabill

回答

66
+0

我看到的其他答案在逗号之后的电子邮件之间留出空格。这是我没有见过的唯一一个。我觉得这样比较好?这两种方式有差异吗? – Jon

+0

如何隐藏header.it中的其他电子邮件将显示所有的电子邮件地址到接收者的电子邮件地址 – smehsoud

+0

@smehsoud这是一个不同的问题,但你可以简单地添加一个BCC线到头。 –

8

如果您需要添加电子邮件作为CC或BCC,添加以下部分用于您的标题变量:

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

问候

+1

为了获得最佳的跨平台兼容性,您可能希望使用PHP_EOL而不是\ r \ n。 –

+0

Evan Donovan真正注意到我已经用'PHP_EOL'改变了'\ r \ n'。 – MTranchant

4

您可以receipients添加到$email_to变量用逗号(,)将它们分开。或者您可以在标题中添加新字段,即CC:BCC:,并将您的收件人放在那里。最推荐使用BCC

7

使用逗号分隔值如下。

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

或运行邮件地址

//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); 
相关问题