PHP 联系表单的配置问题
Configuration issue with PHP contact form
我看到 Whosebug 上有很多类似我的问题,但我想我还没有找到正确的解决方案。
我遇到的问题与接收电子邮件功能有关 - 基本上是网站的 联系我们 部分,用户可以在其中填写基于 html
的表格和按 send message
,此消息将发送到我的电子邮箱。
我使用 XAMPP 和 运行 Apache 服务器以及本地主机上的 Mercury 进行开发。尽管验证显示成功 - 电子邮件无法通过。
- 我试图将
method="post"
添加到 HTML 部分,但发现 type: "POST"
已经包含在内。
- 仔细检查 Mercury 使用的端口并将其与
php.ini
中提到的端口进行比较,两者都设置为 25
。
- 我还尝试部署到 Bitbucket pages 和 Azure,以从本地主机迁移到实时托管。
我已经仔细阅读了这篇非常详细的文章post。将网站上传到实时托管的想法来自于此 post。
<?php
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);
if( isset($name) && isset($email) ) {
// Avoid Email Injection and Mail Form Script Hijacking
$pattern = "/(content-type|bcc:|cc:|to:)/i";
if( preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message) ) {
exit;
}
$to = "myemail@gmail.com";
$sub = "$name from Cv";
// HTML Elements for Email Body
$body = <<<EOD
<strong>Name:</strong> $name <br>
<strong>Email:</strong> <a href="mailto:$email?subject=feedback" "email me">$email</a> <br> <br>
<strong>Message:</strong> $message <br>
EOD;
$headers = "From: $name <$email>\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to, $sub, $body, $headers);
}
?>
$("#contact-form-1").submit(function(e) {
e.preventDefault();
var success = $(this).find('.email-success'),
failed = $(this).find('.email-failed'),
loader = $(this).find('.email-loading'),
postUrl = $(this).attr('action');
success.fadeOut(100); failed.fadeOut(100); loader.fadeOut(100);
var data = {
name: $(this).find('.contact-name').val(),
email: $(this).find('.contact-email').val(),
message: $(this).find('.contact-message').val()
};
if ( isValidEmail(data['email']) && (data['message'].length > 1) && (data['name'].length > 1) ) {
$.ajax({
type: "POST",
url: postUrl,
data: data,
beforeSend: function() {
loader.fadeIn(500);
},
success: function(data) {
loader.fadeOut(500);
failed.fadeOut(500);
success.delay(500).fadeIn(500);
},
error: function(xhr) { // if error occured
loader.fadeOut(500);
success.fadeOut(500);
failed.delay(500).fadeIn(500);
},
complete: function() {
loader.fadeOut(500);
}
});
} else {
loader.fadeOut(500);
failed.delay(500).fadeIn(500);
success.fadeOut(500);
}
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="contact-form-1" action="sendmail.php" method="POST">
<input class="contact-name form-control" type="text" name="name" placeholder="FULL NAME">
<input class="contact-email form-control" type="text" name="email" placeholder="EMAIL">
<textarea class="contact-message form-control" name="message" placeholder="MESSAGE" rows="5"></textarea>
<button class="btn">SEND MESSAGE</button>
</form>
注意:这段代码不是我自己写的,它是由模板创建者提供的。我已经联系了模板创建者并得到了非常糟糕的支持。这是我post这里的主要原因。
在进行更多研究并四处询问时,我发现 this 非常有用的答案终于修复了我的本地 XAMPP 配置。所以代码本身没有问题,但我的配置有问题。
重要提示: 尽量按照步骤进行操作,简单的 ;
缺失会对最终结果产生很大影响。所以仔细检查每一步是否有问题。
还发现了另一本非常有见地和有趣的书 post。
我看到 Whosebug 上有很多类似我的问题,但我想我还没有找到正确的解决方案。
我遇到的问题与接收电子邮件功能有关 - 基本上是网站的 联系我们 部分,用户可以在其中填写基于 html
的表格和按 send message
,此消息将发送到我的电子邮箱。
我使用 XAMPP 和 运行 Apache 服务器以及本地主机上的 Mercury 进行开发。尽管验证显示成功 - 电子邮件无法通过。
- 我试图将
method="post"
添加到 HTML 部分,但发现type: "POST"
已经包含在内。 - 仔细检查 Mercury 使用的端口并将其与
php.ini
中提到的端口进行比较,两者都设置为25
。 - 我还尝试部署到 Bitbucket pages 和 Azure,以从本地主机迁移到实时托管。
我已经仔细阅读了这篇非常详细的文章post。将网站上传到实时托管的想法来自于此 post。
<?php
$name = trim($_POST['name']);
$email = trim($_POST['email']);
$message = trim($_POST['message']);
if( isset($name) && isset($email) ) {
// Avoid Email Injection and Mail Form Script Hijacking
$pattern = "/(content-type|bcc:|cc:|to:)/i";
if( preg_match($pattern, $name) || preg_match($pattern, $email) || preg_match($pattern, $message) ) {
exit;
}
$to = "myemail@gmail.com";
$sub = "$name from Cv";
// HTML Elements for Email Body
$body = <<<EOD
<strong>Name:</strong> $name <br>
<strong>Email:</strong> <a href="mailto:$email?subject=feedback" "email me">$email</a> <br> <br>
<strong>Message:</strong> $message <br>
EOD;
$headers = "From: $name <$email>\r\n";
$headers .= 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
mail($to, $sub, $body, $headers);
}
?>
$("#contact-form-1").submit(function(e) {
e.preventDefault();
var success = $(this).find('.email-success'),
failed = $(this).find('.email-failed'),
loader = $(this).find('.email-loading'),
postUrl = $(this).attr('action');
success.fadeOut(100); failed.fadeOut(100); loader.fadeOut(100);
var data = {
name: $(this).find('.contact-name').val(),
email: $(this).find('.contact-email').val(),
message: $(this).find('.contact-message').val()
};
if ( isValidEmail(data['email']) && (data['message'].length > 1) && (data['name'].length > 1) ) {
$.ajax({
type: "POST",
url: postUrl,
data: data,
beforeSend: function() {
loader.fadeIn(500);
},
success: function(data) {
loader.fadeOut(500);
failed.fadeOut(500);
success.delay(500).fadeIn(500);
},
error: function(xhr) { // if error occured
loader.fadeOut(500);
success.fadeOut(500);
failed.delay(500).fadeIn(500);
},
complete: function() {
loader.fadeOut(500);
}
});
} else {
loader.fadeOut(500);
failed.delay(500).fadeIn(500);
success.fadeOut(500);
}
return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="contact-form-1" action="sendmail.php" method="POST">
<input class="contact-name form-control" type="text" name="name" placeholder="FULL NAME">
<input class="contact-email form-control" type="text" name="email" placeholder="EMAIL">
<textarea class="contact-message form-control" name="message" placeholder="MESSAGE" rows="5"></textarea>
<button class="btn">SEND MESSAGE</button>
</form>
注意:这段代码不是我自己写的,它是由模板创建者提供的。我已经联系了模板创建者并得到了非常糟糕的支持。这是我post这里的主要原因。
在进行更多研究并四处询问时,我发现 this 非常有用的答案终于修复了我的本地 XAMPP 配置。所以代码本身没有问题,但我的配置有问题。
重要提示: 尽量按照步骤进行操作,简单的 ;
缺失会对最终结果产生很大影响。所以仔细检查每一步是否有问题。
还发现了另一本非常有见地和有趣的书 post。