PHP邮件形式问题

时间:2013-12-26 03:01:13

标签: php forms validation webforms

我正在创建一个简单的邮件表单,其中包含复选框,几个输入选项卡和一个文本输入部分。它使用PHP检索信息,然后通过电子邮件将其发送到特定的电子邮件。现在我通过电子邮件发送到我自己的雅虎电子邮件中进行测试。当我在我的托管帐户jacobbuller.com/testsites/peacock/contact.php上测试该网站时,该表单完美无缺,并转发来自我的通用“theski”服务器电子邮件的电子邮件。但是当我将网站上传到peacockautoservice.com的实际主机帐户时,联系表格可以正常工作 - 它会在网址中执行并发送一个?msg = 1变量 - 但我从未收到过我的雅虎帐户中的电子邮件...

这是我用来发送电子邮件的PHP。

<?php ob_start();
<?php 
$required_field = array('name', 'email', 'message');
foreach($required_field as $fieldname) {
if (!isset($_POST[$fieldname])) {
  $errors[] = $fieldname;
}}
if (empty($errors)) {
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$contact = $_POST['contact'];
$phone = $_POST['phone'];
$services = IsChecked('checkboxes', 'factory');
$services .= IsChecked('checkboxes', 'timing belt');
$services .= IsChecked('checkboxes', 'brakes');
$services .= IsChecked('checkboxes', 'computerized');
$services .= IsChecked('checkboxes', 'steering and suspension');
$services .= IsChecked('checkboxes', 'heating and air');
$services .= IsChecked('checkboxes', 'electrical');
$services .= IsChecked('checkboxes', 'other');
$body = "Customer:" . $name;
$body.= "Phone Number:" . $phone;
$body.= "Contact:" . $contact;
$body.= "Services:" . $services;
$body.= "Message:" . $message;
$to = "jcbbuller@yahoo.com";
$subject = "Peacock Auto Services Inquirey";
$from = $email;
$mailed = mail($to, $subject, $body, $from) or die("Error!");
 }
if($mailed) {
    redirect_to("../contact.php?msg=1");
}

 ?>
 <?php
 // IsChecked FUNCTION - Detemines what checkbox are/aren't checked on form.
 function IsChecked($postname, $value){ 
    if(!empty($_POST[$postname])) {
        foreach($_POST[$postname] as $job) {
        if ($job == $value) {
            $project = "  ". $value . "  ";
            return $project;

            }
        }
    }
  } //END IsChecked FUNCTION

 function redirect_to( $location = NULL ) {
    if ($location != NULL) {
        header("Location: {$location}");
        exit;
        }
     }   
 ?>
 <?php ob_end_flush(); ?>

如果您发现上述PHP出现问题或者您知道为什么他们的GoDaddy托管帐户没有执行电子邮件,请告诉我。我尝试使用他们的客户服务网络,但他们说他们无法帮助我处理我的代码...

1 个答案:

答案 0 :(得分:3)

您的问题主要在服务器端。邮件功能正在运行,因为你检查它,如果它失败了,它会给你通知。所以,邮件肯定会发生。如果邮件服务器在您的生产服务器上正常工作,请检查yahoo邮件服务器上的SPAM文件夹。我建议您要求您的托管服务提供商启用SPF和DKIM记录,因为大多数电子邮件提供商都需要发件人身份验证(如果它不是垃圾邮件),并且这些记录对此有帮助。

我还可以看到您没有使用任何标头,因此我建议您使用扩展标头,以避免提供商将您识别为垃圾邮件发送者。我使用下面提到的标题,我的电子邮件永远不会在任何提供商上发送垃圾邮件,但同样取决于服务器的IP信誉。

    $headers .= "Reply-To: Awaraleo <email@domain.org>\r\n";
    $headers .= "Return-Path: Awaraleo <email@domain.org>\r\n";
    $headers .= "From: Awaraleo <email@domain.org>\r\n"; 
    $headers .= "Organization: Awaraleo\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
    $headers .= "X-Priority: 3\r\n";
    $headers .= "X-Mailer: PHP". phpversion() ."\r\n";

然后像

一样使用它
mail($to,$subject,$message,$headers);

此处email@domain.org应该是在实施此表单的域上创建的有效电子邮件地址。

另一种可靠的方法是在编码中使用SMTP身份验证。