php - 将 HEADER 电子邮件更改为自定义电子邮件
问题描述
我有一个表单验证电子邮件脚本,它使用在“电子邮件”字段中输入的 FROM 电子邮件地址;不幸的是,我的主机只接受一个特定的电子邮件地址:no-reply@myhost.com
如何在此 php 脚本中指定“自定义”FROM 电子邮件地址:
<?php
if($_POST)
{
require('constant.php');
$user_name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
$user_phone = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
$content = filter_var($_POST["content"], FILTER_SANITIZE_STRING);
if(empty($user_name)) {
$empty[] = "<b>Name</b>";
}
if(empty($user_email)) {
$empty[] = "<b>Email</b>";
}
if(empty($user_phone)) {
$empty[] = "<b>Phone Number</b>";
}
if(empty($content)) {
$empty[] = "<b>Comments</b>";
}
if(!empty($empty)) {
$output = json_encode(array('type'=>'error', 'text' => implode(", ",$empty) . ' Required!'));
die($output);
}
if(!filter_var($user_email, FILTER_VALIDATE_EMAIL)){ //email validation
$output = json_encode(array('type'=>'error', 'text' => '<b>'.$user_email.'</b> is an invalid Email, please correct it.'));
die($output);
}
//reCAPTCHA validation
if (isset($_POST['g-recaptcha-response'])) {
require('component/recaptcha/src/autoload.php');
$recaptcha = new \ReCaptcha\ReCaptcha(SECRET_KEY, new \ReCaptcha\RequestMethod\SocketPost());
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']);
if (!$resp->isSuccess()) {
$output = json_encode(array('type'=>'error', 'text' => '<b>Captcha</b> Validation Required!'));
die($output);
}
}
$toEmail = "myemail@gmail.com";
$mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
if (mail($toEmail, "Contact Mail", $content, $mailHeaders)) {
$output = json_encode(array('type'=>'message', 'text' => 'Hi '.$user_name .', thank you for the comments. We will get back to you shortly.'));
die($output);
} else {
$output = json_encode(array('type'=>'error', 'text' => 'Unable to send email, please contact'.SENDER_EMAIL));
die($output);
}
}
?>
我试图替换:
$mailHeaders = "From: " . $user_name . "<" . $user_email . ">\r\n";
和:
$mailHeaders = "From: no-reply@myhost.com>\r\n";
但它没有用;抱歉,我的 PHP 知识很少:(
先感谢您。
解决方案
$mailHeaders = "From: no-reply <no-reply@myhost.com>\r\n";
解决了这个问题,只要确保 no-reply 和 no-reply 之间有空格<no-reply@myhost.com>
但现在我们丢失了“电话”实例——我该如何结合
$user_phone = filter_var($_POST["phone"], FILTER_SANITIZE_STRING);
$content = filter_var($_POST["content"], FILTER_SANITIZE_STRING);
一起?
通过添加找到解决方案:
$mail_body = $content;
$mail_body .= "\r\n\r\nName: ".$user_name; //sender name
$mail_body .="\r\nE-Mail: ".$user_email; //sender email
$mail_body .="\r\nPhone: ".$user_phone; //sender phone
$mail_body .="\r\n\r\n";
if (mail($toEmail, "Contact Mail", $mail_body, $mailHeaders)) {
推荐阅读
- php - 我的表有两个时间戳值,其余的是字符串值。我想使用 php 在 html 中显示整个表格
- mongodb - 使用猫鼬,我试图找到具有匹配 3 个不同属性的文档,我在用户中得到空数组 If 语句执行 else 部分
- c# - WPF Datagrid 某些列未选择
- html - asp:图像无法从目录路径显示
- python - 如何用br标签分割html文本
- django - 如何在 Django 管理界面中显示来自 ImageField() 的图像?
- postgresql-9.6 - 他们有什么方法可以在使用 select 语句时使用 postgresql 会话变量
- javascript - href 的 Angular 应用程序中的基本 XSS veracode 漏洞
- javascript - settimeout 并等待是否已设置超时
- python - 关于开始解决作业车间调度的建议