【问题标题】:PHP Mail results in error: "header missing"PHP Mail 导致错误:“header missing”
【发布时间】:2013-10-08 09:23:43
【问题描述】:

我使用 php 邮件表单已经有一段时间了,现在它在新网站上无法使用。

以下错误结果:

PHP 警告:mail() [function.mail]: "sendmail_from" 未在 php.ini 中设置或自定义 "From:" 标头在 E:\home\ -mypagefoldername-\Web\form.php 中缺失第 16 行

这是form.php文件中的php代码:

<?
$mensagem = "Nome: ".$_POST['nome']." \n";
//email que o usuário preencheu
$mensagem .= "Email: ".$_POST['email']." \n";
$mensagem .= "Assunto: ".$_POST['assunto']." \n";
$mensagem .= "Telefone: ".$_POST['fone']." \n";
$mensagem .= "Endereço: ". $_POST['mensagem'];
$headers = "";
//email do seu domínio hospedado
$emailsender = "email@mydomain.com";
//email de quem vai receber
$emaildestinatario = "email@mydomain.com";
$assunto = "Mensagem do Parceiro Pipa";

// Envio dos dados do Formulário para seu e-mail:
if(!mail($emaildestinatario, $assunto, $mensagem, $headers ,"-r".$emailsender))

{ 
// Se for Postfix - hospedagem linux
$headers .= "Return-Path: " . $emailsender . $quebra_linha; 
}
echo '
<script type="text/JavaScript">
alert("Email sent! Thank you!");
location.href="index.html"
</script>
';

?>

对不起葡萄牙语。

表单页面是一个简单的html页面,表单代码如下:

<form method="post" action="form.php">

                    <label>Nome</label>
                    <input name="nome" placeholder="Nome completo.">

                    <label>Telefone</label>
                    <input name="fone" placeholder="Número de telefone com DDD.">                    

                    <label>Assunto</label>
                    <input name="assunto" placeholder="Qual o motivo do seu contato?">                    

                    <label>Mensagem</label>
                    <textarea name="mensagem" placeholder="Escreva aqui sua mensagem."></textarea>



                    <label>Email</label>
                    <input name="email" type="email" placeholder="Email para contato.">

                    <input id="submit" name="submit" type="submit" value="Enviar">

</form>

有人可以帮帮我吗? =/

感谢您的耐心等待!

【问题讨论】:

    标签: php forms email


    【解决方案1】:

    请在 php.ini 文件中更改以下设置

    要启用电子邮件,您应该取消注释以下行或删除行首的分号

    ;sendmail_from =
    

    并将此设置更改为此例如(如果是本地主机)

    sendmail_from = localhost@localhost
    

    如果您在生产服务器上,则必须根据您的域更改默认地址,因此 administrator@domain.com

    【讨论】:

    • 如何访问我的 php.ini 文件?我应该联系我的托管服务提供商还是应该自己去尝试?感谢您的帮助!
    • user2092317 如果你还在我身边,我设置了 sendmail_from 但如果 sendmail 没有收到。有什么想法吗?
    【解决方案2】:

    您没有设置导致该问题的 From 标头,正如以下文档中所述。

    注意:

    发送邮件时,邮件必须包含 From 标头。这可以是 使用 additional_headers 参数设置,或者可以在中设置默认值 php.ini.

    如果不这样做将导致类似于警告的错误消息: mail(): "sendmail_from" 未在 php.ini 或自定义 "From:" 标头中设置 失踪。 From 标头也设置了 Windows 下的 Return-Path。

    来自http://php.net/manual/en/function.mail.php

    在你的情况下,你应该使用;

    $headers = "From: webmaster@example.com" . "\r\n";
    

    【讨论】:

    • 好吧,我试过这样做。我注意到在$emailsender 部分之前有一个$headers ="" 为空,我像您的示例一样对其进行了编辑。是这样吗?恐怕它仍然会出现同样的错误。 =/
    • 我认为你的“if(!mail())”行有问题,正确的用法应该是“mail($to, $subject, $message, $headers);”跨度>
    【解决方案3】:

    正如它所说,您可能在 $headers 变量中缺少 From: 声明!

    <?php
       $From = "YourEmailAddress@example.com";
       $headers .= "From: Your Name <". $From .">\n";
    ?>
    

    $headers 字符串的顶部附近。尽管为了将来的参考,您可能想看看 PHPMailer Class,这是一个非常好的和安全的类,可以有效地处理 PHP mail

    PHPMailer Github

    【讨论】:

    • 尝试完全像这样使用它,但仍然导致相同的错误。
    • 你试过把它放在顶部吗?因为否则您将覆盖$headers ;o 或将= 更改为.=
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    相关资源
    最近更新 更多