我正在尝试从PHP页面发送邮件。我没有收到任何错误,但它不会回显我在代码中包含的验证错误/成功消息。我正在尝试从 Cloud9 发送,这可能是不可能的,但它至少不应该显示我的成功/错误消息吗?
[更新] 现在它确实会显示我的错误消息,但每次我提交时,即使我输入了所需的数据。并且没有信息天气发送失败与否。
.PHP:
<?php
include 'includes/mail.php';
?>
<!DOCTYPE html>
...
<form action="?" method="post">
<input name="contact-name" type="text" placeholder="Ime" class="text-input">
<input name="contact-mail" type="email" placeholder="Email" class="text-input">
<textarea name="contact-text" placeholder="Poruka" class="text-input"></textarea>
<p id="submit-btn">
<button type=submit>
<img src="img/lmbtn.png" alt="submit button">
<span class="noselect">POŠALJI</span>
</button>
</p>
<?php
if (empty($errors) === true) {
if(isset($contact_text, $contact_name, $contact_mail)) {
$subject = "Mail from " . $contact_name ." via www.mysite.com";
$headers = "From: " . $contact_mail;
$sent = mail($to, $subject, $contact_text, $headers);
if ($sent) {
echo "<p>Poruka je poslata!</p>";
} else {
echo "<p>I dalje baguje.</p>";
}
}
} else {
?>
<ul>
<?php
foreach ($errors as $error) {
echo "<li>", $error, "</li>";
}
?>
</ul>
<?php
}
?>
</form>
...
以及包含的邮件.php:
<?php
$to = "mymail@gmail.com";
if (isset($_POST['contact-name'], $_POST['contact-mail'], $_POST['contact-text'])) {
if (empty($_POST['contact-name'])) {
$errors[] = "Molimo unesite Vaše ime";
} else {
$contact_name = htmlentities($_POST['contact-name']);
}
if (empty($_POST['contact-mail'])) {
$errors[] = "Molimo unesite Vašu email adresu.";
} else if (strlen($_POST['contact-mail']) > 60) {
$errors[] = "Vaša email adresa je predugačka.";
} else if (filter_var($_POST['contact-mail'], FILTER_VALIDATE_EMAIL) === false ) {
$errors[] = "Unesite validnu email adresu.";
} else {
$contact_mail = "<" . htmlentities($_POST['contact-mail']) . ">";
}
if (empty($_POST['contact-text'])) {
$errors[] = "Molimo unesite poruku.";
} else {
$contact_text = htmlentities($_POST['contact-text']);
}
}
?>
我没有包括css或javascript,我想它们不相关。JQuery 只是在提交表单后重置表单。有什么帮助吗,我尝试了堆栈溢出和谷歌?
邮件将通过服务器发送,因此您需要发布表单,服务器将邮寄并回复结果。
使用相同的 php 脚本来生成邮件和发送邮件。
所以首先当你打开页面时,服务器将生成表单,因为表单不是"是"发布的。并且不会生成 $_POST 变量。
但是,当您尝试提交表单时,它不会被提交,因为您在提交时设置了"返回假"。
要在不加载页面的情况下提交表单,您需要异步发送数据(使用 Ajax,搜索 Google 以获取更多信息)
此外,即使您删除"返回false"代码也无法工作,因为mail()函数返回布尔值true和false,但从不回显它。所以你可以var_dump它。
尝试简化版 maby?
<?php
// Check for empty fields
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['phone']) ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
// Create the email and send the message
$to = 'example@example.com'; // Add your email address inbetween the '' replacing yourname@yourdomain.com - This is where the form will send a message to.
$email_subject = "New Email: $name";
$email_body = "You have a new message.'n'n"."Details:'n'nName: $name'n'nEmail: $email_address'n'nPhone: $phone'n'nMessage:'n$message";
$headers = "From: noreply@yourwebsite.com'n"; // This is the email address the generated message will be from. We recommend using something like noreply@yourdomain.com.
$headers .= "Reply-To: $email_address";
mail($to,$email_subject,$email_body,$headers);
return true;
?>
您确定您的服务器支持 PhP 邮件功能,对吗?
检查你的 php.ini顺便说一下,请参阅 http://php.net/manual/en/mail.configuration.php
在此文件中,您可以看到日志文件的位置,并检查所有内容是否正确配置。