尽管确认

时间:2017-06-08 02:12:53

标签: php html forms email contact

我创建了一个允许人们从网站发送电子邮件的表单。 HTML代码(请参阅附件)调用PHP脚本(请参阅附件),并且应该发送电子邮件。该网页显示消息“电子邮件已成功发送”,但我从未真正收到过该电子邮件(它也不是垃圾邮件)。

我已经联系我的托管服务(等待回复)以检查是否支持PHP。与此同时,我想确保我的代码没有错误。

HTML:

<form action="message.php" method="post">
    <fieldset>
        <p>Name <span class="requiredAsterisk">*</span></p>
        <input name="name"/>
        <p>Email <span class="requiredAsterisk">*</span></p>
        <input name="email"/>
        <p>Message <span class="requiredAsterisk">*</span></p>
        <textarea name="message"></textarea>
    </fieldset>
    <fieldset>
        <input class="sendMessage w3-large" type="submit" value="Send Message"/>
    </fieldset>
  </form>

PHP:

<?php
$header = 'From: ' .$_POST['name'] ."\r\n" .'Reply-to: ' .$_POST['email'] ."\r\n" .'X-Mailer: PHP/' .phpversion();
if (mail("forrest.c.fan@gmail.com", "Email from website", $_POST['message'], $header)) {
    echo ("<p>Email successfully sent</p>");
} else {
    echo ("<p>Email failed</p>");
}
?>

提前致谢

2 个答案:

答案 0 :(得分:1)

PHP中原始mail()函数的一个很好的替代方法就像PHPMailer。正如github页面中所述:

  

您在网上找到的绝大多数使用mail()的代码   功能直接是完全错误的!请不要动心   你自己 - 如果你不使用PHPMailer,还有很多其他的   在推出自己的库之前你应该看一下优秀的库 -   试试SwiftMailer,Zend_Mail,eZcomponents等。

PHPMailer非常容易设置和开始。这是发送电子邮件的基本语法:

<?php
require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'user@example.com';                 // SMTP username
$mail->Password = 'secret';                           // SMTP password
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->setFrom('from@example.com', 'Mailer');
$mail->addAddress('joe@example.net');     // Add a recipient

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

答案 1 :(得分:0)

(我可能会评论这个,但我的代表太低了)你应该使用 $message = wordwrap($_POST['message'], 70, "\r\n");所以您的消息遵循mail()上的文档。除此之外,你的代码似乎没问题。正如您所提到的,它可能与您的托管服务提供商有关,因为它们通常会阻止mail功能。另请参阅this question on it了解可能导致问题的其他内容。