使用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>';
}
}
}
?>
答案 0 :(得分:0)
问题可能在于您对mail
功能的调用。
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"