【问题标题】:PHP only sending one mail() in a pagePHP 只在一个页面中发送一个 mail()
【发布时间】:2016-04-30 16:50:20
【问题描述】:

突然之间,我在有人在表单上注册后发送电子邮件的 PHP 代码停止工作。我正在绞尽脑汁想弄清楚发生了什么……

我已经测试了一小段通过电子邮件发送给自己的代码,它可以工作。 我在页面执行时观察了 Chrome 中的控制台窗口,但它没有显示任何错误。

代码向我发送一封包含表单信息的电子邮件,并向用户的收件箱发送一封电子邮件,告知注册成功。

// SENDING EMAIL

//To me
$line_break = "\r\n";
$emailSender = "subscriptions@mydomain.com";
$emailTOme = "me@mydomain.com";
$cco = "support@mydomain.com";
$subject= "my subject";
$messageHTML = '
    <p>Nome.......: ' . $nome . '</p>
    <p>E-mail.......: '.$email . ' </p>
    <p>Profissão.......: '. $profissao . '  </p>
    <p>Endereço.....: '. $endereco . ', ' . $endereco_num . ' </p>
    <p>Complemento.....: '. $complemento . '</p>
    <p>Bairro.......: ' . $bairro . ' </p>
    <p>CEP..........: '. $cep . ' </p>
    <p>Cidade.......: ' . $cidade . ' </p>
    <p>UF...........: ' . $uf . ' </p>
    <p>Telefone.....: ' . $telefone . ' </p>
    <p>Celular......: ' . $celular . ' </p>
    <p>Inscrição p/.: ' . $evento . '</p>
    <p>Valor da inscrição: <b>R$' . $valor_inscricao . '</b></p>';

$headers = "MIME-Version: 1.1" . $line_break;
$headers .= "Content-type: text/html; charset=iso-8859-1". $line_break;
$headers .= "From: " . $emailSender . $line_break;
$headers .= "Return-Path: " . $emailSender . $line_break;
$headers .= "Bcc: " . $cco . $line_break;
$headers .= "Reply-to: " .  $emailSender . $line_break;

mail($emailTOme , $subject, $messageHTML,$headers, $emailSender);  

//email for the user
$messageHTMLuser = '
    <p> Lorem </p>
    <p> Ipsum </b></p>';


$headers2 = "MIME-Version: 1.1" . $line_break;
$headers2 .= "Content-type: text/html; charset=iso-8859-1". $line_break;
$headers2 .= "From: " . $emailSender . $line_break;
$headers2 .= "Return-Path: " . $emailSender . $line_break;
$headers2 .= "Reply-to: " .  $emailSender . $line_break;

mail($email, 'We recieved your registration', $messageHTMLuser, $headers2, $emailSender);

问题是现在只有第二个mail() 函数起作用了。

第二个函数上的$email来自之前的形式。

【问题讨论】:

  • Chrome 控制台窗口只会显示 Javascript/网络错误,不会显示 PHP 错误。
  • 您不应该查看错误日志吗?
  • 看起来第一个 $header 上的 BCC 行是问题...但它总是有效!任何想法为什么它停止了?

标签: php html email


【解决方案1】:

尝试注释掉“密件抄送”这一行。

由于当前的 php 邮件不支持此选项(不再) - 显然是为了避免密件抄送表单垃圾邮件..

为了使用高级电子邮件功能,最好使用 PHPMailer(或类似的库):https://packagist.org/packages/phpmailer/phpmailer

【讨论】:

  • @Reto 您所有的代码变体最终都与问题中的代码完全相同。他们不可能改变任何事情。您能解释一下为什么您认为您的更改可能会有所帮助吗?
  • 正如我所提到的 - 它可能是一种 PHP 方式的 bcc-form-spam-protection ;)
  • 您提供的链接与问题或您的答案无关。我的观点是$headers .= 'Bcc: support@mydomain.com'. $line_break;(您的答案)和$cco = "support@mydomain.com"; $headers .= "Bcc: " . $cco . $line_break;(OP 版本)完全相同,标题将完全相同。埃文在你所有的编辑之后,你的答案仍然显示将产生与 OP 中的代码完全相同的输出的代码。
  • 我对@9​​87654324@ 进行了硬编码,但它不起作用...
  • @Reto 现在您编辑了您的答案并通过添加两个相互矛盾的建议使其更加混乱:注释掉 Bcc 行而不是保留 Bcc 行但“硬编码”它。 @卢卡斯M。请参阅我之前的评论,“硬编码”不会完成任何事情,请使用 var_dump($headers) 并查看无论此答案的建议如何,它们都完全相同。
【解决方案2】:

将此添加到脚本的开头,它应该会在页面顶部显示您的错误(如果有)。

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 2011-12-05
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-12-26
    • 1970-01-01
    • 2012-09-17
    相关资源
    最近更新 更多