如何更改与PHP联系表单关联的“来自电子邮件地址”

时间:2016-08-29 19:42:02

标签: php

我的PHP代码的所有内容都正常运行,唯一的是,当我收到联系表单中的电子邮件时,我的网站的“来自”是@ p3plcpnl0547.prod.phx3.secureserver.net。

来自联系表格的电子邮件示例

enter image description here

如何更改@ p3plcpnl0547.prod.phx3.secureserver.net?

<?php

if(isset($_POST['send_email'])) {

    //collect the form values
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    // set the email properties

    $to = 'alicia.angner@yahoo.com';
    $subject = "Contact Form Submission";
    $from =  $email ;
    $headers = 'MIME-Version: 1.0' . "\r\n";
    $headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $headers = "From: $from";
    $headers = "$name \n $phone \n $email";

    //attempt to send the mail, catch errors if they occur
    try {
        mail($to,$subject,$headers,$message);
        $msg = "<strong>Your mail was sent successfully!</strong>";
    }catch(Exception $e) {
        $msg = "An Exception was thrown: ".$e -> getMessage()."<br>";
    }
}
?>

3 个答案:

答案 0 :(得分:3)

你正在覆盖每一行的$ headers变量,而是想要附加到它。替换:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers = 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers = "From: $from";
$headers = "$name \n $phone \n $email";

使用:

$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= "From: $from";
$headers .= "$name \n $phone \n $email";

我不太确定最后一行是完成的,是否应该在$ message中呢?

答案 1 :(得分:0)

您还可以编辑sendmail_from中指定的php.ini以设置参数的defaut。 来源:http://php.net/manual/en/function.mail.php

答案 2 :(得分:0)

虽然其他答案已经指出了您的直接问题,但注意到您覆盖了变量$headers的值,导致您的标题设置不正确,您还需要其他信息用这种方式从PHP发送电子邮件时要考虑。

PHP的mail()功能通常只与你的sendmail binary on * nix systems )对话,这可能是一个真正的MTA,或者它可能只是一些例如,与postfix等电子邮件服务器通信的脚本。

这一点很重要,因为电子邮件既可以包含Sender标题,也可以包含From标题,它们可以不同。通常,MTA负责设置Sender标头,如果您关心在电子邮件标头中正确设置此信息,这很重要。

您通常可以从/etc/mail/access/etc/sendmail/access更改sendmail配置中的发件人,您可以在其中指定允许哪些用户从哪些电子邮件地址发送。这些规则可能会有所不同,具体取决于您依赖的MTA,未经授权的发件人的电子邮件可能会被您的MTA甚至收件人拒绝,因为这可能会触发电子邮件中的警告标题。所以一定要考虑到这一点。

电子邮件的未来注意事项

出于学习目的,这很好,但如果您打算在生产中处理电子邮件,我总是建议不要在PHP中使用mail()设置,配置和维护您自己的电子邮件服务器可能是一个相当艰巨的过程。

相反,请考虑依赖AWS' SESSendgrid等电子邮件服务。它们更可靠,不太可能将您的电子邮件发送到垃圾邮件文件夹中,并且不太可能将您的IP地址放在黑名单上以获取垃圾邮件。它们还有很好的文档API,更适合发送批量电子邮件,而无需键入自己的服务器或PHP资源。