0

使用引导邮件表单。表单传递邮件,除了在 from 变量中它显示服务器名称而不是发件人的电子邮件地址。

有人可以解释我如何让 $name 变量显示为“发件人”,或者至少显示发送电子邮件的域的名称而不是服务器名称?

 <?php
    if (isset($_POST["submit"])) {
        $name = $_POST['name'];
        $email = $_POST['email'];
        $business = $_POST['business'];
        $phone = $_POST['phone'];
        $message = $_POST['message'];
        $from = 'From website of xxxxxx'; 
        $to = 'user@somedomainname.com'; 
        $subject = 'New Message ';

        $body = "From: $name\n E-Mail: $email\n Business Name: $business\n  Phone: $phone\nMessage: $message";

        // Check if name has been entered
        if (!$_POST['name']) {
            $errName = 'Please enter your name';
        }

        // Check if email has been entered and is valid
        if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
            $errEmail = 'Please enter a valid email address';
        }

         // Check if business has been entered
        if (!$_POST['business']) {
            $errBusiness = 'Please enter your business or organization name';
        }

         // Check if phone has been entered
        if (!$_POST['phone']) {
            $errPhone = 'Please enter your phone number';
        }

        //Check if message has been entered
        if (!$_POST['message']) {
            $errMessage = 'Please enter your message';
        }

// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage) {
    if (mail ($to, $subject, $body, $from)) {
        $result='<div class="alert alert-success">Thank You! I will be in touch.</div>';
    } else {
        $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later.</div>';
    }
}
    }
?>
4

2 回答 2

0

原来我需要做的就是在 php.ini 文件中添加一行并放入服务器的根目录。不必将 $headers 添加到 mod from: 行的现有脚本中。

有些人更喜欢 from: 行来显示实际发件人的地址,但我发现这会对垃圾邮件过滤器造成严重破坏,因为提交的每个表单都来自不同的用户。我确信有办法纠正这个问题,现在 100% 确定如何做到这一点,

sendmail_path="/usr/sbin/sendmail -t -i -f webmaster@somedomainname.com"
于 2016-01-13T08:33:16.460 回答
0

问题可能在于您对该mail函数的调用。

正如文档所说

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

而且,更有趣的是,

附加标题(可选)

要插入到电子邮件标题末尾的字符串。

这通常用于添加额外的标题(发件人、抄送和密送)。多个额外的标头应该用 CRLF (\r\n) 分隔。如果使用外部数据构成此标头,则应对数据进行清理,以免注入不需要的标头。

笔记:

additional_headers 没有邮件头注入保护。因此,用户必须确保指定的标头是安全的并且仅包含标头。即永远不要通过放置多个换行符来启动邮件正文。

笔记:

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

不这样做将导致类似于警告的错误消息:mail(): "sendmail_from" not set in php.ini or custom "From:" header missing。From 标头还设置了 Windows 下的 Return-Path。

笔记:

如果未收到消息,请尝试仅使用 LF (\n)。一些 Unix 邮件传输代理(尤其是 » qmail)会自动将 LF 替换为 CRLF(如果使用 CRLF,则会导致 CR 加倍)。这应该是最后的手段,因为它不符合 » RFC 2822。

于 2016-01-13T08:14:31.090 回答