PHP电子邮件 - 想要发送到不同的电子邮件

时间:2015-08-07 08:18:27

标签: php forms email

目前:

我有下面的PHP表单,用户可以选中其中一个复选框,通知他们要预订的位置。

目标:

我现在想要的是,当有人点击Canterbury时,会发送一封电子邮件至email1@gmail.com,何时发送至Broadstairs - email2@gmail.com,以及何时处理 - email3@gmail.com

我一直在试图做出改变,但我陷入了混乱。

仅供参考我不介意将复选框更改为下拉列表,但我宁愿保持这种方式。

当前的PHP部分:

<?php
ini_set('display_errors',0);
error_reporting(E_ALL);
$error = '';

if(isset($_POST['send']))
{
        $name = $_REQUEST['Name'];
        $telephone = $_REQUEST['Telephone'];
        $email = $_REQUEST['Email'];
        $message = $_REQUEST['Message'];
        $headers = "From: $email";
        $subject = "Web Contact Data";
        $selectedProjects  = 'None';
            if(isset($_POST['projects']) && is_array($_POST['projects']) && count($_POST['projects']) > 0){
                $selectedProjects = implode(', ', $_POST['projects']);
            }

        $fields = array();
        $fields["Name"] = $name;
        $fields["Telephone"] = $telephone;
        $fields["Email"] = $email;
        $fields["Message"] = $message;
        $fields["Location"] = $selectedProjects;

         $to = "email4@gmail.com" ; // change all the following to $_POST

        $body = "You have recieved the following information:\n\n";
        foreach($fields as $key => $value)
        {
            $body .= sprintf("%20s: %s\n",$key,$value);
        } // end foreach($fields as $key => $value)

        $subject2 = "Thank you for contacting us.";
        $autoreply = "<html><body><p>Dear " . $name . ",</p><p>Message goes here.</p></body></html>"; 
        $headers2  = 'MIME-Version: 1.0' . "\r\n";
        $headers2 .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers2 .= 'From: email4@gmail.com' . "\r\n";

        $send=false;
        if($name == '')
        {
            $error = "You did not enter your name, please try again.";
            selected_values();
        }
        $send=false;
        if($telephone == '')
        {
            $error = "You did not enter your telephone number, please try again.";
            selected_values();
        }
        elseif(!preg_match("/^[[:alnum:]][a-z0-9_.'+-]*@[a-z0-9-]+(\.[a-z0-9-]{2,})+$/", $email))
        {
            $error = "You did not enter a valid email address, please try again.";
            selected_values();
        }
        else
        {
            $send = mail($to, $subject, $body, $headers);
            $send2 = mail($email, $subject2, $autoreply, $headers2);

            if(!isset($error) && !$send)
            {
                $error = "We have encountered an error sending your mail, please notify [email]email4@gmail.com[/email].";
            }
            else
            {
                unset($_REQUEST['Name']);
                unset($_REQUEST['Email']);
                unset($_REQUEST['Telephone']);
                unset($_REQUEST['Message']);
            }
    } // end else
}// end of if(isset($_POST['send']))
?>

HTML表单是这样的:

<form method="post" action="./lead.php">
<ul>
    <li>
        <?php
        if(isset($error))
            echo '<div class="register_error">'.$error.'</div>';
        if(isset($send) &&  $send== true){
            =echo '<div class="contact-send-green">Thank you for your message.</div>';
        }
        if(!isset($_POST['send']) || isset($error))
        ?>
    </li>
    <li>
        <input type="checkbox" name="projects[]" value="Broadstairs">
        <label for="type2">Broadstairs</label>
        <br /><br />
        <input type="checkbox" name="projects[]" value="Canterbury">
        <label for="type2">Canterbury</label>
        <br /><br />
        <input type="checkbox" name="projects[]" value="Deal">
        <label for="type2">Deal</label>
    </li>
    <li>
        <textarea name="Message" rows="5" cols="29"><?php if(isset($_REQUEST['Message'])) echo $_REQUEST['Message']; ?></textarea>
    </li>
    <li>
        <input type="submit" name="send" value="Send Message" id="send-email">
    </li>
</ul>

3 个答案:

答案 0 :(得分:4)

对于单一选择,一个简单的switch(){}就能发挥作用。

switch($_POST['projects']){
   case "Broadstairs":
      $to = "email@email.com";
      break;
   case "Canterbury":
      $to = "email@email.com";
      break;
   case "Deal":
      $to = "email@email.com";
      break;
}

然后从输入名称中删除[],因为您不需要将它们作为数组。 (因此:)

<input type="checkbox" name="projects" value="Broadstairs">

然后可能考虑使用一些JS / jQuery来检查一次只选择1个?

答案 1 :(得分:3)

您提供的脚本有3个问题

  1. 您只想选择一个电子邮件地址,但是您使用名称projects[]作为复选框名称 - 这将创建一个数组,但是从HTML5开始;如果你使用一个名字多次,即使没有[],它也会创建一个数组。
  2. 鉴于上述情况,您应该最明确地提到更改为<select>框或<radio>按钮。
  3. 除非绝对需要,否则你应该使用$_REQUEST,这为sql注入提供了一个轻松的机会。
  4. 这是我将如何做的一个例子。

    <强> HTML

    <form method="post" action="./lead.php">
    <ul>
        <li>
            <?php
                if(isset($error)) echo '<div class="register_error">'.$error.'</div>';
                if(isset($send) &&  $send== true) echo '<div class="contact-send-green">Thank you for your message.</div>';
            ?>
        </li>
        <li>
            <label for="Broadstairs"><input type="radio" name="projects" id='Broadstairs' value="Broadstairs"> Broadstairs</label>
            <label for="Canterbury"><input type="radio" name="projects" id='Canterbury' value="Canterbury">Canterbury</label>
            <label for="Deal"><input type="radio" name="projects" id='Deal' value="Deal">Deal</label>
        </li>
        <li>
            <textarea name="Message" rows="5" cols="29"><?=(strlen($_POST['Message'])>0) ? $_POST['Message'] : ''; ?></textarea>
        </li>
        <li>
            <button type='submit'>Send Message</button>
        </li>
    </ul>
    

    和你的PHP

    <?php
    
    if (!empty($_POST)) {
        // Dispatch message to selected office
        $name       = $_POST['Name'];
        $telephone  = $_POST['Telephone'];
        $email      = $_POST['Email'];
        $message    = $_POST['Message'];
        $subject    = "Web Contact Data";
    
        // To send HTML mail, the Content-type header must be set
        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: My website <my-email@example.com>' . "\r\n";
    
        if ($_POST['projects'] == 'Canterbury') $to = "example@gmail.com" ;
        elseif ($_POST['projects'] == 'Broadstairs') $to = "example@gmail.com" ; 
        else $to = "example@gmail.com" ;
    
        mail($to, $subject, $message, $headers);
    
    
        // Dispatch "Thank You" email
        $subject = "Your message has been received!";
    
    ob_start();
    ?>
    <html>
    <body>
    <p>Dear <?=$name?></p>
    <p>Thank you for contacting us,</p>
    <p>We have received your message and will respond to you as soon as possible.</p>
    <p>This is an automatic response to your inquiry and it is not necessary to reply.</p>
    <p>Thank you,</p>
    </body>
    </html>
    <?
    $message = ob_get_flush();
    
        mail($email, $subject, $message, $headers)
    }
    
    ?>
    

    我也会推荐Google Recaptcha

    希望这有帮助

答案 2 :(得分:0)

您需要在代码中添加ifelseifelse条件。

$to = "email1@email.com" ;替换为以下代码

if($_POST['projects'] == 'Broadstairs')
{
    $to = "email2@email.com";
}
else if($_POST['projects'] == 'Canterbury')
{
$to = "email3@email.com";
}
else if($_POST['projects'] == 'Deal')
{
    $to = "email4@email.com";
}
else
{
    $to = "email5@email.com";
}