具有多个收件人的PHP联系表单不起作用


PHP contact form with multiple recipient not working

我构建了一个PHP联系表单,用户必须填写所有字段,用php验证表单并发送给先前选择的收件人。不幸的是,它不起作用,消息永远不会到达目的地。我做错了什么?

我给你留下代码:

<form method="post" action="index.php#kontakt">
    <p>
    <label>Namn</label>
    <input name="name" type="text" placeholder="Skriv här">
    <label>Din e-post adress</label>
    <input name="dinepost" type="email" placeholder="Skriv här">
    <label for="sendTo">Välj mottagare:</label>
    <select name="sendTo" required id="sendTo">
        <option id="joao" value="joao">joao</option>
        <option id="company 2" value="lfsolutions">lfsolutions</option>
    </select>
    <label>Meddelande</label>
    <textarea name="message" placeholder="Skriv här"></textarea>
    <label>Hur mycket är 2+2? (Anti-spam)</label>
    <input name="human" type="number" placeholder="Svara här">
    </p>
    <p>
    <input id="submit" name="submit" type="submit" value="Skicka meddelandet!" class="botao"><br>
    *Alla fält är obligatoriska
    </p>
    <?php
        $name = $_POST['name'];
        $email = $_POST['dinepost'];
        $message = $_POST['message'];
        $from = 'webbsida'; 
        $to = $_POST['sendTo'];
        $subject = 'Ny meddelande';
        $human = $_POST['human'];
        switch ($sendTo) {
            case "joao":
              $sendTo = "email1@gmail.com";
              break;
            case "lfsolutions":
              $sendTo = "email2@gmail.com";
              break;
            default:
              $sendTo = "email3@gmail.com";
        }
        $headers = "MIME-Version: 1.0" . PHP_EOL;
        $headers .= "From: $from <$email> ". PHP_EOL;
        $headers .= "Content-type: text/html;charset=UTF-8 ". PHP_EOL;
        $name = str_replace( '[at]','@', $name);
        $message = str_replace( '[at]','@', $message);
        $body = "<strong>Från:</strong> $name'n <br><strong>E-post:</strong> $dinepost'n <br><strong>Meddelandet:</strong>'n <br>$message";
        if ($_POST['submit']) {
        if ($name != '' && filter_var($email, FILTER_VALIDATE_EMAIL)) {
            if ($human == '4') {                 
                if (mail ($to, $subject, $body, $headers)) { 
                echo '<div data-alert class="alert-box success">
                        <p>Ditt meddelande har skickats! Tack så mycket!</p>
                        <a href="#" class="close">&times;</a>
                      </div>';
            } else { 
                echo '<div data-alert class="alert-box alert">
                        <p>Någonting gick fel. Var vänlig och försök igen!</p>
                        <a href="#" class="close">&times;</a>
                      </div>'; 
            } 
        } else if ($_POST['submit'] && $human != '4') {
            echo '<div data-alert class="alert-box alert">
                    <p>Du har gett fel svar på Anti-Spam frågan!</p>
                    <a href="#" class="close">&times;</a>
                  </div>';
        }
        } else {
            echo '<div data-alert class="alert-box alert">
                    <p>Du behöver att fylla alla fält i formuläret!</p>
                    <a href="#" class="close">&times;</a>
                  </div>';
        }
    }
    ?>
</form>

你的switch语句是问题所在。如果我正确理解您的代码,它应该是

switch ($to) {    // not $sendTo
   // (...)
          }

您的版本不尊重用户的选择。

这对你有帮助吗?

所以你实际上有两个问题。首先是Burki指出的开关问题。

第二个是您在呼叫邮件时没有使用 $sendTo 的值。对mail的调用需要使用 $sendTo 作为 To: 字段,如下所示:

mail ($sendTo, $subject, $body, $headers)