PHP(邮件)联系表 - "reply to sender's email" 问题
PHP (Mail) Contact Form - "reply to sender's email" issue
抱歉,如果这看起来很愚蠢,但我的 PHP 知识接近“0”标记。我建立了一个网站,并根据需要使用了一个相当简单的 PHP 联系表格。但是我仍然有一些我无法真正解决的问题。
例如,当我收到电子邮件时,我希望能够回复发送电子邮件的人,基本上能够回复到 his/her 添加的电子邮件地址。现在 PHP 配置为包含我的服务器端电子邮件的 "from" 和 "to"。我将粘贴在代码下方。每当我尝试点击 "Reply" 时,我基本上都是在回复我的服务器端电子邮件地址。
有没有办法通过我在下面粘贴的代码来做到这一点?
另一个问题与 Gmail 有关。当我收到一封电子邮件时,所有内容都内联,所以我得到类似:"Name - Name, Surname - Surname, Email - Email, Message - Message" 的内容。我在服务器端电子邮件上设置了重定向,因此我也可以通过 gmail 地址获取电子邮件。但是,如果我通过网络邮件在服务器端查看电子邮件,格式正确,则每一行都在其单独的行中。
我可以在 Gmail 上实现吗?
这是我的 PHP 代码
<?php
// configure
$from = 'contact@mydomain.com';
$sendTo = 'contact@mydomain.com';
$subject = 'New message from contact form';
$fields = array('name' => 'Name', 'surname' => 'Surname', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); // array variable name => Text to appear in the email
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';
$errorMessage = 'There was an error while submitting the form. Please try again later';
// let's do the sending
try
{
$emailText = "You have new message from contact form\n=============================\n";
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}
$headers = array('Content-Type: text/html; charset="UTF-8";',
'From: ' . $from,
'Reply-To: ' . $from,
'Return-Path: ' . $from,
);
mail($sendTo, $subject, $emailText, implode("\n", $headers));
$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
$responseArray = array('type' => 'danger', 'message' => $errorMessage);
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
header('Content-Type: application/json');
echo $encoded;
}
else {
echo $responseArray['message'];
}
您应该使用 hard-coded "From" 来接收用户的电子邮件并将其设置为 'from'。
我猜你的表单中有名称为 email
的电子邮件字段。所以从
'From: ' . $from,
到
'From: ' . $_POST['email'],
现在 header From:
应该包含提供的用户电子邮件。我认为您的代码很奇怪,但这可以解决您的问题。
抱歉,如果这看起来很愚蠢,但我的 PHP 知识接近“0”标记。我建立了一个网站,并根据需要使用了一个相当简单的 PHP 联系表格。但是我仍然有一些我无法真正解决的问题。
例如,当我收到电子邮件时,我希望能够回复发送电子邮件的人,基本上能够回复到 his/her 添加的电子邮件地址。现在 PHP 配置为包含我的服务器端电子邮件的 "from" 和 "to"。我将粘贴在代码下方。每当我尝试点击 "Reply" 时,我基本上都是在回复我的服务器端电子邮件地址。
有没有办法通过我在下面粘贴的代码来做到这一点?
另一个问题与 Gmail 有关。当我收到一封电子邮件时,所有内容都内联,所以我得到类似:"Name - Name, Surname - Surname, Email - Email, Message - Message" 的内容。我在服务器端电子邮件上设置了重定向,因此我也可以通过 gmail 地址获取电子邮件。但是,如果我通过网络邮件在服务器端查看电子邮件,格式正确,则每一行都在其单独的行中。
我可以在 Gmail 上实现吗?
这是我的 PHP 代码
<?php
// configure
$from = 'contact@mydomain.com';
$sendTo = 'contact@mydomain.com';
$subject = 'New message from contact form';
$fields = array('name' => 'Name', 'surname' => 'Surname', 'phone' => 'Phone', 'email' => 'Email', 'message' => 'Message'); // array variable name => Text to appear in the email
$okMessage = 'Contact form successfully submitted. Thank you, I will get back to you soon!';
$errorMessage = 'There was an error while submitting the form. Please try again later';
// let's do the sending
try
{
$emailText = "You have new message from contact form\n=============================\n";
foreach ($_POST as $key => $value) {
if (isset($fields[$key])) {
$emailText .= "$fields[$key]: $value\n";
}
}
$headers = array('Content-Type: text/html; charset="UTF-8";',
'From: ' . $from,
'Reply-To: ' . $from,
'Return-Path: ' . $from,
);
mail($sendTo, $subject, $emailText, implode("\n", $headers));
$responseArray = array('type' => 'success', 'message' => $okMessage);
}
catch (\Exception $e)
{
$responseArray = array('type' => 'danger', 'message' => $errorMessage);
}
if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
$encoded = json_encode($responseArray);
header('Content-Type: application/json');
echo $encoded;
}
else {
echo $responseArray['message'];
}
您应该使用 hard-coded "From" 来接收用户的电子邮件并将其设置为 'from'。
我猜你的表单中有名称为 email
的电子邮件字段。所以从
'From: ' . $from,
到
'From: ' . $_POST['email'],
现在 header From:
应该包含提供的用户电子邮件。我认为您的代码很奇怪,但这可以解决您的问题。