【问题标题】:Php email form not sending email from web email formPhp电子邮件表单不从网络电子邮件表单发送电子邮件
【发布时间】:2019-02-02 14:47:58
【问题描述】:

我正在尝试解决此表单的问题。它不会从网站上的表格发送预订请求。尽管显示了表单已发送的消息。

我尝试编辑电子邮件和标题。

<?
//print_r($_POST);

$to = “email@emaildomain.com, {$posting['email']}";
function msg($text){
echo "
    <script type='text/javascript'>
    alert('".$text."');
    top.location.href = 'http://www.aribbq.com';
    </script>
";
exit;
}

function error($text){
echo "
    <script type='text/javascript'>
    alert('".$text."');
    history.go(-1);
    </script>
";
exit;
}

if (!$_POST[date]) {error('Please, insert Date.');}
if (!$_POST[time]) {error('Please, insert Time.');}
if (!$_POST[party]) {error('Please, insert Party.');}
if (!$_POST[reservation_name]) {error('Please, insert Name.');}
if (!$_POST[reservation_email]) {error('Please, insert Email.');}
if (!$_POST[reservation_phone]) {error('Please, insert Phone.');}  
if(isset($_POST['submit'])){
 // then send the form to your email

//$from = ('Reservation from AriBBQ.com'); // sender
$mailheaders = "From: contact@aribbq.com" . "\r\n"; // . "CC: 
design@youremail.com"
$mailheaders .= 'Reply-To: ' . $posting['Email'] . "\r\n";
$subject = "AriBBQ.com Online Reservation";
$body = "\n Contact Name: ".$_POST[reservation_name]." \r\n\n"; 
//
$body .= " Email: ".$_POST[reservation_email]." \r\n\n"; //
$body .= " =================================================== \r\n\n"; //
$body .= "  Book a table \r\n\n
            Date: ".$_POST[date]." \r\n\n
            Time: ".$_POST[time]." \r\n\n
            Party: ".$_POST[party]." \r\n\n
            Contact Details \r\n\n
            Name: ".$_POST[reservation_name]." \r\n\n
            Email: ".$_POST[reservation_email]." \r\n\n
            Phone: ".$_POST[reservation_phone]." \r\n\n
            Message: ".$_POST[reservation_message]." \r\n\n"; //
$body .= " =================================================== \r\n\n"; //


$result = mail($to , $from , $subject , $body , $mailheaders); 
if($result) {msg('Thank you, your reservation has been sent. We 
will send you a confirmation text or call in person.');} // 
else{error('Sending mail is failed. Please try again');} //

} else {
error('No submitted. Please try again');
}

?>

您可以在http://aribbq.com/ 在线查看表格。点击预订。收到电子邮件后,我们希望能够回复发件人的电子邮件地址。

【问题讨论】:

  • 尝试将您的开始标签更改为&lt;?php&lt;? 由 xml 使用。不确定它是否会有所作为,但从头开始,嗯? =)
  • 我更改并加载了它,但没有区别。还是谢谢。
  • 我注意到您对除$to 地址之外的所有数据都使用$_POST,您使用$posting,这是故意的吗?另外,暂时将error_reporting( E_ALL ); 添加到您的脚本中,看看是否有任何错误。
  • 您来自地址已被注释掉。您将需要在末尾删除所有任意注释斜线并清理您的代码(格式)以帮助人们一目了然地进行故障排除。另外-这之前有效吗?发送预订请求是什么意思 - 您是指电子邮件吗?另一个建议 - 创建一个非常简单的带有硬编码值的 php 邮件脚本,以确保您确实可以从脚本所在的服务器成功调用邮件命令。然后从那里向后工作。
  • 会不会是$to = “email@emaildomain.com, {$posting['email']}"; 上的花引号(左双引号)?这些与常规引号的解释不同。您是否启用了错误报告?

标签: php


【解决方案1】:

好的,基本上,您需要打开错误报告,因为您的脚本向我抛出了大约 20 个错误,您会在错误报告时看到这些错误。正如我上面的评论所说,在调试时将error_reporting(E_ALL); 添加到脚本的顶部。

我遇到的问题如下:

Parse error: syntax error, unexpected '@' in /mail.php on line 4 由不正确的双引号字符引起,不是",而是。微妙,但有问题。

接下来,Multiple or malformed newlines found in additional_header in /mail.php,因为从 PHP 5.5.2 开始,bug was fixed 可以防止邮件头注入,所以应该删除 $mailheaders 中的所有 \n\n,我建议将 PHP_EOL 附加到而不是每行的末尾。

您的 $from 变量包含在 mail() 调用中,这会带来 2 个问题。一,mail() 函数没有 from 参数,您将其包含在标题中。二 - 您的变量实际上已被注释掉。

正如我在上面的评论中提到的,您要发送到的电子邮件地址变量在$mailheaders 中键入为$posting['email']'$posting['Email']。这里的问题是$posting 不存在。其次,您的表单,您应该在未来的问题中包含 HTML 以供人们更轻松地帮助您的独立示例(请参阅 https://stackoverflow.com/help/how-to-ask,根本不会发布 email ,它发布reservation_email

最后,您的大部分$_POST 引用不包含引号,因此PHP 不知道如何处理方括号之间的单词。例如,$_POST[date] 应该是 $_POST['date']

我已经进行了上述所有更改,并成功地使用提供的脚本和电子邮件表单向自己发送了电子邮件,唯一没有看到的是您的msg(),它没有向我显示成功消息。但是,我确实在此函数调用之前添加了 echo 语句,打印结果很好。

我希望这可以帮助您启动并运行您的脚本,祝您好运并记住,error_reporting(); 是您的朋友!

【讨论】:

  • 非常感谢!我将电子邮件的回复放在邮件标题 $mailheaders .= 'Reply-To: ' 中。 ['reservation_email'] 。 "\r\n";并修复了 $_POST 引用。另外,我在我的电子邮件地址中发现了一个拼写错误,用于测试它。 :-P 在修复所有这些并加载它之后,它就可以工作了!再次感谢!
  • 嘿,没问题。有时,您需要的只是换眼,休息一下!
【解决方案2】:

mail() 大多数服务器上的功能被禁用,尝试从 smtp PhpMailer 发送邮件是一个很好的解决方案。

【讨论】:

  • 我不知道它被大多数服务器“禁用”,但根据我的经验,使用此功能发送的电子邮件会被垃圾邮件过滤器捕获。
  • php mail() 出于安全原因在 2-3 年内被禁用。无论如何,她无法使用该设置发送电子邮件。她需要更改几乎全部的代码。
  • 这是 PHP 4,5 和 7 中内置的标准函数,默认 php.ini 没有禁用它。出于安全原因,一些主机管理员可能会禁用它,但这不是标准配置。它已在许多流行的托管服务上启用
  • mail() 功能在 Windows 服务器上通常不可用,因为 Windows 默认不包含邮件服务器,但通常在 Linux 服务器上启用。不管它是否可用,使用 PHPMailer 使用 SMTP 到 localhost 会更加安全和快速,如果您可以使用 mail(),您能够做到这一点。 mail() 函数本质上是不安全的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2012-03-15
相关资源
最近更新 更多