-2

我在用于发送表单数据的基本联系人 PHP 脚本方面遇到问题。有问题的页面

我的 PHP 非常有限,但我的语法无法发现任何明显的问题。

该脚本进行一些基本的错误检查并将结果存储在变量 $error 中

if($email && !ValidateEmail($email))
{
    $error .= 'Invalid E-mail !!!';
}

然后是有问题的PHP:

if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
    "From: ".$name." <".$email."> \r\n"
    ."Subject: BOOKING FORM SUBMISSION \r\n"
    ."X-Mailer: PHP/".phpversion());
if($mail)
  {
    echo 'OK';
  }
  else {
    echo 'Mail called, no mail';
  }
}
else
  {
    echo '<div class="notification_error">'.$error.'</div>';
  }
}

如果我输入 bob@hj 作为电子邮件,PHP 脚本会识别此错误,并且我会从脚本中得到响应:“无效电子邮件”,因此我可以确认表单数据正在发送到查看检查器页面的脚本显示数据被正确解析。

当没有错误时,响应是“已调用邮件,未发送邮件”,所以我认为我正在调用的 mail() 函数有问题。

我尝试将标题简化为具有相同结果的直接字段。

有任何想法吗?提前感谢堆栈上的伟大社区。

认为包括我用来调用脚本的 jquery 可能值得,但鉴于 PHP 的响应“已调用邮件,没有邮件”,我认为这不是 jQuery 引起的问题。

jQuery("#booking-form").submit(function(){
            _CONTACT = jQuery(this);
            var str = _CONTACT.serialize();
            jQuery.ajax({
                   type: "POST",
                   url: "basic_booking_form/booking.php",
                   data: str,
                   success: function(msg){
                        jQuery(document).ajaxComplete(function(event, request, settings){
                            if(msg == 'OK') {
                                result = '<div class="notification_ok">Your message has been sent Succesfully. Thank you.</div>';
                                jQuery("#fields").hide();
                                _CONTACT.hide();
                                _CONTACT.html(result).slideDown("slow");
                                _CONTACT.html(result);
                            }
                            else {
                                result = msg;
                                _CONTACT.find('#note').html(result).slideDown("slow");
                            }
                        });
                    }
                });
            return false;
            });
4

1 回答 1

-2

更新感谢所有即将参与并提供帮助的人,我很高兴地说我有一个使用“SwiftMail”的更好的解决方案。对于那些涉足这些常见的 PHP 联系表单教程的人,我强烈推荐使用它。实现它很简单,现在我使用自己的邮件服务器 smtp 设置而不是 PHP 的 mail() 函数发送邮件。

生成的 PHP 代码(在我的文件结构中包含 swiftmail 之后):

<?php

require_once '../swift_mail/lib/swift_required.php';

include 'config.php';
  error_reporting (E_ALL ^ E_NOTICE);
  $post = (!empty($_POST)) ? true : false;

if($post)
{
  include 'functions.php';
  $name = stripslashes($_POST['name']);
  $apartment = trim($_POST['apartment']);
  $email = trim($_POST['email']);
  $tel = trim($_POST['tel']);
  $mob = trim($_POST['mob']);
  $arrive = trim($_POST['arrive']);
  $depart = trim($_POST['depart']);
  $guests = trim($_POST['guests']);
  $guests13 = trim($_POST['guests13']);
  $accept = trim($_POST['accept']);

  $message = "Name: ".$name."\n"."Tel: ".$tel."\n"."Mobile: ".$mob."\n"."Apartment: ".$apartment."\n"."Arrive: ".$arrive."\n"."Depart: ".$depart."\n"."Guests: ".$guests."\n"."Guests under 13: ".$guests13."\n".stripslashes($_POST['message'])."\n"."Terms Accepted: ".$accept;

  $error = '';

  // Create the Transport
  $transport = Swift_SmtpTransport::newInstance('mail.******.co.uk', 26)
  ->setUsername('******')
  ->setPassword('******');
  if(!$transport) {
    $error .= 'error creating transport';
  }

  // Create the Mailer using your created Transport
  $mailer = Swift_Mailer::newInstance($transport);

  // Check name
  if(!$name)
  {
    $error .= 'You need to enter a name';
  }
  // Check email
  if(!$email)
  {
    $error .= 'Please enter a valid e-mail. It will not be stored or added to any mailing list.';
  }
  if($email && !ValidateEmail($email))
  {
    $error .= 'Invalid E-mail !!!';
  }
  if(!$accept)
  {
    $error .= 'You must accept the terms and conditions to make a reservation.';
  }
  if(!$error)
  {
    $mail_to_send = Swift_Message::newInstance()
    // Give the message a subject
    ->setSubject('Booking Form Submission')
    // Set the From address with an associative array
    ->setFrom(array($email => $name))
    ->setReplyTo($email)
    // Set the To addresses with an associative array
    ->setTo(WEBMASTER_EMAIL)
    // Give it a body
    ->setBody($message);

    // Send the message
    $result = $mailer->send($mail_to_send);
    if($result) {
      echo 'OK';
    } 
    else {
      echo 'mailer not successful';
    }
  }
  else
  {
    echo '<pre>
    <div class="notification_error">'.$error.'</div>
    </pre>';
  }
}
?>
于 2013-11-11T17:25:23.640 回答