我创建了一个允许人们从网站发送电子邮件的表单。 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>");
}
?>
提前致谢
答案 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了解可能导致问题的其他内容。