PHP邮件没有收到?

时间:2012-12-15 19:13:34

标签: php forms email hotmail

  

可能重复:
  Mail not being received by hotmail.com

我在我的网站上有这个简单的表单,当它发送到我的Hotmail帐户时,我不会收到电子邮件,甚至不会收到垃圾邮件文件夹。

以下是表单代码:

<form action="mail.php" method="POST">
    <p><label title="Name">Name:</label><br />
        <input type="text" name="name" autocomplete="on" required="required"></p>
    <p><label title="Email">Email:</label><br />
        <input type="text" name="email" autocomplete="on" required="required"></p>
    <p><label title="About">My message is about...</label><br />
        <select name="about">
            <option value="general">General Query</option>
            <option value="wedding">Wedding</option>
            <option value="corporate">Corporate Event or Trade Show</option>
            <option value="other">Other Event</option>
        </select>
    <p><label title="Message">Message:</label><br />
        <textarea name="message" rows="6" cols="25" required="required"></textarea></p>
    <input type="submit" value="Send">
</form>

mail.php文件:

<?php 
        $name = $_POST['name'];
        $email = $_POST['email'];
        $message = $_POST['message'];
        $about = $_POST['about'];
        $formcontent="From: $name \n About: $about \n Message: $message";
        $recipient = "MyEmailAddress@Live.co.uk";
        $subject = "Contact Form";
        $mailheader = "Reply-To: $email \r\n";
    mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
    echo "Thank You!";
?>

我最终看到的页面上写着“谢谢!”显示但未收到任何电子邮件。

2 个答案:

答案 0 :(得分:3)

邮件投递是一项棘手的业务......仅仅因为您发送邮件并不意味着任何人都会收到邮件。许多接收服务器只会忽略传入的消息,如果它不符合某些标准(根据我的经验,Gmail和Hotmail特别容易默默地拒绝传递,因此它甚至不会在垃圾邮件中结束)。有几件事要确保你已经完成:

1)您在DNS记录中设置了PTR / SPF(反向查询)条目

2)确保您没有使用任何黑名单(http://www.mxtoolbox.com/blacklists.aspx

3)扩展标题

$headers = "MIME-Version: 1.0\r\n"
          ."Content-Type: $contentType; charset=utf-8\r\n"
          ."Content-Transfer-Encoding: 8bit\r\n"
          ."From: =?UTF-8?B?". base64_encode("Your sending display name") ."?= <$from>\r\n"
          ."Reply-To: $replyTo\r\n"
          ."X-Mailer: PHP/". phpversion();

但是,如果您确实希望确保邮件通过,请发送邮件via SMTP。您永远不能保证邮件传递,但它会更可靠。如果您没有发送大量邮件,可以尝试使用Mandrill或类似服务为您转发电子邮件。

答案 1 :(得分:0)

您可以使用以下方法。成功后返回true。

function sendMail($email, $subject, $message)
{
    $supportEmail = 'info@abc.com';
    $from = 'Abc';
    $msg  = $message;
    $from = str_replace(' ', '-', $from);
    $frm  = $from.' <'.$supportEmail.'>';
    preg_match("<(.*)@(.*\..*)>", $frm, $match);

    ///////////////////Headers/////////////////
    $hdr='';
    $hdr.='MIME-Version: 1.0'."\n";
    $hdr.='content-type: text/html; charset=iso-8859-1'."\n";
    $hdr.="From: {$frm}\n";
    $hdr.="Reply-To: {$frm}\n";
    $hdr.="Message-ID: <".time()."@{$match[2]}>\n";
    $hdr.='X-Mailer: PHP v'.phpversion();
    $x=@mail($email, $subject, $msg, $hdr);
    if($x==0)
    {
        $email=str_replace('@','\@', $email);
        $hdr=str_replace('@','\@',$hdr);
        $x=@mail($email, $subject, $msg, $hdr);
    }
    return $x;
}