簡體   English   中英

PHP聯系人表單腳本未發送電子郵件

[英]PHP contact form script not sending emails

我對php不太滿意,我的朋友幫助我完成了php聯絡表單腳本。 但這似乎沒有將電子郵件發送到所需的地址。 您能否提出這個腳本可能是什么問題?

我真的很感激。 謝謝

    <?php
$error = array();

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') ) {
    if(!empty($_POST['name'])) {
        $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your name.';
    }

    if(!empty($_POST['email'])) {
        if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        } else {
            $error[] = 'Please enter a correct email address.';
        }
    } else {
        $error[] = 'Please enter your email address.';
    }

    if(!empty($_POST['phone'])) {
        if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) {
            $phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
        } else {
            $error[] = '<i>Phone number</i> only expects number';
        }
    } else {
        $error[] = 'Please enter your email address.';
    }

    if(!empty($_POST['time'])) {
        $time = filter_var($_POST['time'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your best time to contact.';
    }

    if(!empty($_POST['msg'])) {
        $msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your message.';
    }

    if(empty($error)) {
        $to      = 'your@email.com';
        $subject = 'from contact form';

        $message = $phone . "\r\n";
        $message .= $time . "\r\n";
        $message .= $msg;

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" .
            'Reply-To: '.$name.' <'. $email . '>' ."\r\n";

        //echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die();

        mail($to, $subject, $message, $headers);
    }
}

?>


<?php
if(!empty($error)) {
    echo '<ul class="error">';
    echo '<li>' . implode('</li><li>', $error) . '</li>';
    echo '</ul>';
}
?>

<form method="post" action="">
    <input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/>
    <input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/>
    <input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/>
    <input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/>
    <textarea name="msg" placeholder="Your message" class="email_form"></textarea>

    <input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button">
</form>

更改此行:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') ) {

if(isset($_POST['contact_submit']) ) {

<input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button">

<input type = "submit" value="submit" name="contact_submit">

PHP正在尋找一種提交類型,而您正在使用一種圖像類型。

  • 如果您仍要將圖像用作提交按鈕:

您將需要更改:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') )

到另一個條件語句。

例如:

if(!empty($_POST['email'])){

您始終可以將其他要檢查的字段添加到該條件語句,以檢查它們是否已設置/為空。

例如:

if(!empty($_POST['email']) || !empty($_POST['name'])){
  • 在測試您的代碼后,直到進行了這些更改,該代碼才起作用。

注意 :如果仍未發送/接收郵件,則需要確保mail()確實可供您使用,和/或檢查日志和“垃圾郵件”框。

錯誤報告添加到文件頂部,這將在生產測試期間提供幫助。

error_reporting(E_ALL);
ini_set('display_errors', 1);
  • 這將觸發發現的任何錯誤。

腳注:

電話字段必須為全數字,否則將失敗。

即: 555-234-5678無效,但5552345678 ,因此您需要將其輸入方式告知用戶。


編輯:(完整代碼)-將email@example.com更改為您自己的電子郵件時,請完全按照顯示的內容進行復制。

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$error = array();

if(isset($_POST['contact_submit']) ) {
    if(!empty($_POST['name'])) {
        $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your name.';
    }

    if(!empty($_POST['email'])) {
        if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
        } else {
            $error[] = 'Please enter a correct email address.';
        }
    } else {
        $error[] = 'Please enter your email address.';
    }

    if(!empty($_POST['phone'])) {
        if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) {
            $phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
        } else {
            $error[] = '<i>Phone number</i> only expects number';
        }
    } else {
        $error[] = 'Please enter your email address.';
    }

    if(!empty($_POST['time'])) {
        $time = filter_var($_POST['time'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your best time to contact.';
    }

    if(!empty($_POST['msg'])) {
        $msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING);
    } else {
        $error[] = 'Please enter your message.';
    }

    if(empty($error)) {
        $to      = 'email@example.com';
        $subject = 'from contact form';

        $message = $phone . "\r\n";
        $message .= $time . "\r\n";
        $message .= $msg;

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" .
            'Reply-To: '.$name.' <'. $email . '>' ."\r\n";

        //echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die();

        mail($to, $subject, $message, $headers);
    }
}

?>


<?php
if(!empty($error)) {
    echo '<ul class="error">';
    echo '<li>' . implode('</li><li>', $error) . '</li>';
    echo '</ul>';
}
?>

<form method="post" action="">
    <input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/>
    <input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/>
    <input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/>
    <input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/>
    <textarea name="msg" placeholder="Your message" class="email_form"></textarea>

    <input type = "submit" value="submit" name="contact_submit">

</form>

如果替換成功,您還可以顯示一條消息,方法是:

mail($to, $subject, $message, $headers);

有:

if(mail($to, $subject, $message, $headers)){

  echo "Mail sent, thank you.";

 }

 else{
   echo "There was an error.";
}

您還可以記錄錯誤:

0   message is sent to PHP's system logger, using the Operating System's system logging mechanism or a file, depending on what the error_log configuration directive is set to. This is the default option.
1   message is sent by email to the address in the destination parameter. This is the only message type where the fourth parameter, extra_headers is used.
2   No longer an option.
3   message is appended to the file destination. A newline is not automatically added to the end of the message string.
4   message is sent directly to the SAPI logging handler.

即:

if(mail($to, $subject, $message, $headers)){

  echo "Mail sent, thank you.";

 }

 else{
   error_log("Error!", 3, "/var/tmp/mail-errors.log");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM