PHP mail () проблема - PullRequest
       7

PHP mail () проблема

0 голосов
/ 31 августа 2011

Я пытаюсь включить простую контактную форму в тему WordPress, которую я для кого-то кодирую (они хотят, чтобы она работала без использования плагинов WP, поэтому я просто использую PHP).

Вот код, который я использую:

<?php

include "../../../../wp-blog-header.php"; // include WP to be able to use some options

if (of_get_option('ss_contact_email', 'no entry' )) { // custom WP option
    $mailto = of_get_option('ss_contact_email', 'no entry' );
} else {
    $mailto = get_option('admin_email'); // WP option to get email address of the admin
};

$cc = "";
$bcc = "";
$subject = "[Contact Form] " .$_POST['subject']. ""; 

$vname = ucwords($_POST['user']);

$email = $_POST['email'];

function validateEmail($email)
{
   if(eregi('^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z]{2,4}(\.[a-zA-Z]{2,3})?(\.[a-zA-Z]{2,3})?$', $email))
      return true;
   else
      return false;
}


if((strlen($_POST['user']) < 1 ) || (strlen($email) < 1 ) || (strlen($_POST['question']) < 1 ) || validateEmail($email) == FALSE){
    $emailerror .= '';

    if(strlen($_POST['user']) < 1 ){
        $emailerror .= '<span class="wrong">Please enter your name. </span>';
    }

    if(validateEmail($email) == FALSE || strlen($email) < 1 ) {
        $emailerror .= '<span class="wrong">Please enter a valid e-mail address. </span>';
    } 

    if(strlen($_POST['message']) < 1 ){
        $emailerror .= '<span class="wrong">Please enter your message. </span>';
    }

} else {

    $emailerror .= "<span>Your message has been sent. Thank you!</span>";

    // NOW SEND THE ENQUIRY

    $timestamp = date("F j, Y, g:ia");

    $messageproper ="\n\n" .
        "Name: " .
        ucwords($_POST['user']) .
        "\n" .
        "Email: " .
        $email .
        "\n" .
        "Website: " .
        $_POST['url'] .
        "\n" .
        "Subject: " .
        $_POST['subject'] .
        "\n" .
        "Comments: " .
        "\n" .
        $_POST['message'] .
        "\n" .
        "\n\n" ;

        $messageproper = trim(stripslashes($messageproper));

        mail($mailto, $subject, $messageproper, "From: \"$vname\" <".$_POST['email'].">\nReply-To: \"".ucwords($_POST['user'])."\" <".$_POST['email'].">\nX-Mailer: PHP/" . phpversion() );

}
?>

<?php echo $emailerror; ?>

Обработка ошибок выглядит нормально, она возвращает все правильные ошибки, но если все поля верны, то вместо отправки и отображения сообщения «Спасибо ..» гаснет пустое.

Я использовал один и тот же сценарий на одном и том же сервере много раз, и у меня никогда не было проблем с ним, но на этот раз я наткнулся на проблему - письмо не отправляется, даже если оно не возвращает ошибок .

Я не уверен, что идет не так. Кто-нибудь может просмотреть код и найти очевидные ошибки?

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Вы используете:

 strlen($_POST['question']) < 1

в качестве проверки в своем утверждении if, но затем используете «message» в качестве замены.Если «вопрос» не задан, он не будет пытаться отправить, но также не будет печатать ошибку.

0 голосов
/ 31 августа 2011

Поскольку электронное письмо не отправляется, скорее всего, PHP умирает в момент вызова mail().Вы не проверяете возвращаемое значение из mail (), что является плохой формой - никогда не предполагайте, что вызов внешней службы завершился успешно.Включите отчеты об ошибках, включите отображение ошибок и т. Д., Затем попробуйте снова заполнить контактную форму.проверьте журналы вашего сервера и посмотрите, появляется ли что-нибудь в браузере.

В остальном код выглядит нормально, поэтому без дополнительной информации этот вопрос, скорее всего, не отвечает.

...