PHP mail()函数的问题

时间:2013-11-09 20:30:00

标签: email php

我遇到了用于发送表单数据的基本联系人PHP脚本的问题。 问题page

我的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的响应“Mail called,no mail”我认为它不是导致问题的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;
            });

1 个答案:

答案 0 :(得分:-2)


UPDATE 感谢所有即将参与并提供帮助的人,我很高兴地说我有一个更好的解决方案,使用“SwiftMail”。对于那些涉及这些常见的PHP联系表单教程的人,我强烈建议使用它。 实现它很简单,现在我使用自己的邮件服务器smtp设置而不是PHPs 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>';
  }
}
?>