Bootstrap邮件表单 - 从变量接收

时间:2016-01-13 07:36:17

标签: twitter-bootstrap email email-headers formmail

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

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

 <?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>';
    }
}
    }
?>

2 个答案:

答案 0 :(得分:0)

问题可能在于您对mail功能的调用。

As the docs say

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

,更有趣的是,

  

additional_headers(可选)

     

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

     

这通常用于添加额外的标题(From,Cc和Bcc)。应使用CRLF(\ r \ n)分隔多个额外标头。如果使用外部数据来组成此标头,则应对数据进行清理,以便不会注入不需要的标头。

     

注意:

     

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

     

注意:

     

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

     

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

     

注意:

     

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

答案 1 :(得分:0)

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

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

sendmail_path="/usr/sbin/sendmail -t -i -f webmaster@somedomainname.com"