PHP mail()不起作用,但没有错误

时间:2016-03-10 14:24:29

标签: php html html5 email

我正在尝试从PHP页面发送邮件。我没有收到任何错误,但它没有回应我在代码中包含的验证错误/成功消息。我试图从Cloud9发送,这可能是不可能的,但它不应该至少显示我的成功/错误消息?

[ UPDATE ]现在它确实显示了我的错误消息,但每次提交时,即使我输入了所需的数据。没有信息天气发送失败与否。

PHP:

<?php 
  include 'includes/mail.php';
?>
<!DOCTYPE html>

...

<form action="?" method="post">
          <input name="contact-name" type="text" placeholder="Ime" class="text-input">
          <input name="contact-mail" type="email" placeholder="Email" class="text-input">
          <textarea name="contact-text" placeholder="Poruka" class="text-input"></textarea>
          <p id="submit-btn">
            <button type=submit>
              <img src="img/lmbtn.png" alt="submit button">
              <span class="noselect">POŠALJI</span>
            </button>
          </p>
          <?php
              if (empty($errors) === true) {
                  if(isset($contact_text, $contact_name, $contact_mail)) {
                    $subject = "Mail from " . $contact_name ." via www.mysite.com";
                    $headers = "From: " . $contact_mail;
                    $sent = mail($to, $subject, $contact_text, $headers);
                    if ($sent) {
                      echo "<p>Poruka je poslata!</p>";
                    } else {
                      echo "<p>I dalje baguje.</p>";
                    }
                  }
                } else {
                  ?>
                    <ul>
                      <?php
                        foreach ($errors as $error) {
                          echo "<li>", $error, "</li>";
                        }
                       ?>
                    </ul>
                  <?php 
                }
          ?>
        </form>
...

包含mail.php:

<?php 
    $to = "mymail@gmail.com";

    if (isset($_POST['contact-name'], $_POST['contact-mail'], $_POST['contact-text'])) {
        if (empty($_POST['contact-name'])) {
            $errors[] = "Molimo unesite Vaše ime";
        } else {
            $contact_name = htmlentities($_POST['contact-name']);
        }

        if (empty($_POST['contact-mail'])) {
            $errors[] = "Molimo unesite Vašu email adresu.";
        } else if (strlen($_POST['contact-mail']) > 60) {
            $errors[] = "Vaša email adresa je predugačka.";
        } else if (filter_var($_POST['contact-mail'], FILTER_VALIDATE_EMAIL) === false ) {
            $errors[] = "Unesite validnu email adresu.";
        } else {
            $contact_mail = "<" . htmlentities($_POST['contact-mail']) . ">";
        }

        if (empty($_POST['contact-text'])) {
            $errors[] = "Molimo unesite poruku.";
        } else {
            $contact_text = htmlentities($_POST['contact-text']);
        }
    }
?>

我没有包含css或javascript,我猜他们不相关。 JQuery只是在提交后重置表单。任何帮助,我尝试了stackoverflow和谷歌?

3 个答案:

答案 0 :(得分:0)

邮件将通过服务器发送,因此您需要发布表单,服务器将邮寄并回复结果。

正在使用相同的php脚本生成邮件并发送邮件。

首先,当你打开页面时。服务器将生成表单,因为表单未发布。并且不会生成$ _POST变量。

但是当您尝试提交表单时,由于您设置了“return false”,因此无法提交表单。提交。

要在没有页面加载的情况下提交表单,您需要异步发送数据(使用Ajax,搜索Google以获取更多信息)

即使你删除“返回错误”代码也不会工作,因为mail()函数返回布尔值true和false但从不回应它。所以你可以var_dump它。

答案 1 :(得分:0)

试用简化版maby?

<?php
// Check for empty fields
if(empty($_POST['name'])        ||
   empty($_POST['email'])       ||
   empty($_POST['phone'])       ||
   empty($_POST['message']) ||
   !filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
   {
    echo "No arguments Provided!";
    return false;
   }

$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];

// Create the email and send the message
$to = 'example@example.com'; // Add your email address inbetween the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
$email_subject = "New Email:  $name";
$email_body = "You have a new message.\n\n"."Details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
$headers = "From: noreply@yourwebsite.com\n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
$headers .= "Reply-To: $email_address"; 
mail($to,$email_subject,$email_body,$headers);
return true;            
?>

您确定您的服务器支持PhP邮件功能,对吗?

答案 2 :(得分:0)

请检查您的php.ini,请参阅http://php.net/manual/en/mail.configuration.php

在此文件中,您可以查看日志文件的位置,并检查是否所有内容都已正确配置。