问题描述
联系方式未发送。如果有人知道我在做什么错,我将不胜感激。该网站已经启用,我在PHP中使用了正确的电子邮件地址。不确定100是否有任何信息会进入HTML联系人表格的顶部。
谢谢
HTML代码:
<div class="row">
<div class="col-12">
<br>
<h2 class="contact-title">Get in Touch</h2>
</div>
<div class="col-lg-8">
<form class="form-contact contact_form" action="contact_process.php" method="post" id="contactForm"
novalidate="novalidate">
<div class="row">
<div class="col-12">
<div class="form-group">
<textarea class="form-control w-100" name="message" id="message" cols="30" rows="9"
onfocus="this.placeholder = ''" onblur="this.placeholder = 'Enter Message'"
placeholder='Enter Message'></textarea>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input class="form-control" name="name" id="name" type="text" onfocus="this.placeholder = ''"
onblur="this.placeholder = 'Enter your name'" placeholder='Enter your name'>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input class="form-control" name="email" id="email" type="email" onfocus="this.placeholder = ''"
onblur="this.placeholder = 'Enter email address'" placeholder='Enter email address'>
</div>
</div>
<div class="col-12">
<div class="form-group">
<input class="form-control" name="subject" id="subject" type="text" onfocus="this.placeholder = ''"
onblur="this.placeholder = 'Enter Subject'" placeholder='Enter Subject'>
</div>
</div>
</div>
<div class="form-group mt-3">
<a href="#" class="btn_3 button-contactForm" >Send Message</a>
</div>
</form>
</div>
PHP代码:
<?php
$to = "i have used a correct email address";
$from = $_REQUEST['email'];
$name = $_REQUEST['name'];
$subject = $_REQUEST['subject'];
$number = $_REQUEST['number'];
$cmessage = $_REQUEST['message'];
$headers = "From: $from";
$headers = "From: " . $from . "\r\n";
$headers .= "Reply-To: ". $from . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
$subject = "You have a message from your Bitmap Photography.";
$logo = 'img/logo.png';
$link = '#';
$body = "<!DOCTYPE html><html lang='en'><head><meta charset='UTF-8'><title>Express Mail</title>
</head><body>";
$body .= "<table style='width: 100%;'>";
$body .= "<thead style='text-align: center;'><tr><td style='border:none;' colspan='2'>";
$body .= "<a href='{$link}'><img src='{$logo}' alt=''></a><br><br>";
$body .= "</td></tr></thead><tbody><tr>";
$body .= "<td style='border:none;'><strong>Name:</strong> {$name}</td>";
$body .= "<td style='border:none;'><strong>Email:</strong> {$from}</td>";
$body .= "</tr>";
$body .= "<tr><td style='border:none;'><strong>Subject:</strong> {$csubject}</td></tr>";
$body .= "<tr><td></td></tr>";
$body .= "<tr><td colspan='2' style='border:none;'>{$cmessage}</td></tr>";
$body .= "</tbody></table>";
$body .= "</body></html>";
$send = mail($to,$subject,$body,$headers);
?>
联系方式未发送。如果有人知道我在做什么错,我将不胜感激。该网站已经启用,我在PHP中使用了正确的电子邮件地址。不确定100是否有任何信息会进入html联系人表单的开头。
解决方法
您必须在代码中进行一些更改才能使邮件正常工作。首先,您必须更改按钮的代码。它必须像:<button type="submit"class="btn_3 button-contactForm">Send Message</button>
,您还必须更改PHP文件中的代码以发送邮件,您必须删除$ send并使它像mail($to,$subject,$body,$headers);
一样,还必须注意,并非全部托管公司支持mail()PHP函数。因此,请确保您的网络托管服务提供商支持mail()函数。如果您的托管服务不支持PHP mail()函数,则必须使用PHPMailer类。 PHPMailer使用SMTP并发送带有表单数据的邮件。您可以使用composer下载PHPMailer类。还有其他网站可以从中下载。解压缩下载的zip文件后,您会发现有一个名为PHPMailer的文件夹,其中包含许多其他PHP文件。您无需更改任何其他PHP文件。确保文件夹中存在autoload.php
文件,因为autoload.php文件是获取并合并SMTP邮件的所有必要类的文件。之后,您必须将PHPMailer文件夹上载到服务器中的根目录(使用FTP进行共享托管,或者仅复制粘贴以使用专用服务器)。首先,您必须创建一个Gmail或任何邮件帐户,PHPMailer通过该帐户发送邮件。创建帐户后,转到帐户设置,并确保禁用两步身份验证。之后,还可以打开安全性较低的应用,您可以执行from here。
完成所有这些之后,您必须创建两个发送表单数据的PHP文件,第一个将是您如上所述的contact_process.php,该php文件的代码将是:
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'phpmail/vendor/autoload.php';
if($_POST)
{
require('constant.php');
$user_name = filter_var($_POST["name"],FILTER_SANITIZE_STRING);
$user_email = filter_var($_POST["email"],FILTER_SANITIZE_EMAIL);
$subject = filter_var($_POST["subject"],FILTER_SANITIZE_STRING);
$msg = filter_var($_POST["msg"],FILTER_SANITIZE_STRING);
$mail = new PHPMailer(true);
// $mail->SMTPDebug = 0;
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail -> Host = HOST; //this gets called from the constant.php
$mail->Username = USERNAME;
$mail->Password = PASSWORD;
$mail->From = $user_email;
$mail->FromName = $user_name;
$mail->addAddress(RECIPIENT_MAIL,RECIPIENT_MAIL_NAME); //this gets called from the constant.php do not change this
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = "New Response from website :\n\n<br>".
"Name: $user_name\n\n<br>".
"Email: $user_email \n\n<br>".
"Subject: $subject \n\n<br>".
"Message: \n\n <br>". "$msg\n\n<br>";
$mail->AltBody = "This is the plain text version of the email content";
if (!$mail->send()) {
echo json_encode(array('type'=>'error','text' => 'Try Again later')); //error sending form
exit;
} else {
//mail sent successfully
header("Location: thankyou.php");//change the link to the thank you page
exit;
}
}
?>
现在必须创建一个constant.php文件,其中必须配置收件人和发件人。的代码将是:
<?php
// SMTP Configuration
define('HOST',"ssl://smtp.gmail.com");
define('USERNAME',"sending-mail@gmail.com"); //mail address of gmail you created
define('PASSWORD',"password-of-sending-mail-acc"); //password of gmail you created
// Recipient Configuration
define('RECIPIENT_MAIL',"recipient@gmail.com"); //enter mail address you want the form data to get received
define('RECIPIENT_MAIL_NAME',"Website"); //name of recipient
?>
确保所有文件都在根目录中。您还可以将文件添加到其他目录,但必须更改文件的目录链接。
有关更多详细的文档和源代码,您可以see this.