- 此问题在此处已有答案**:
(31个答案)
昨天关门了。
我已经做了一个常规的HTML表单,POST方法和操作引用了一个PHP页面,代码是我在Stackoverflow上找到的。另外,我还添加了一个javascript验证。
我已经检查了所有的东西,据我所知,一切都很好。但是,我从来没有收到过电子邮件。起初,我以为是javascript干扰了$_POST['submit']
,但即使没有验证,表单也没有给我发送数据。此外,PHP有一个echo
行,当试图提交表单而没有验证时,它也没有显示。
我在谷歌上搜索过,这可能与代码过时有关,因为它使用了直接的mail()
指令。尽管如此,我还是想将表单发送到特定的电子邮件。有办法做到这一点吗?你能帮助我获得正确的代码吗?
我甚至尝试使用直接HTML mailto:
属性,但甚至没有工作。
最后,我试着使用一些SMTP服务器代码,我发现在其他问题在这里,但我似乎不能搞清楚它。在服务器端(Gmail),我允许POP3和IMAP在我的Gmail帐户。
我知道有类似的问题,但没有一个答案适合我。因为我是一个菜鸟,我希望最简单的解决方案只涉及PHP编码或Gmail设置。我不希望安装或纳入任何第三方的东西。
先谢了。
这是我曾经尝试过的:
超文本:
<form method="post" action="send.php" id="qForm" enctype="multipart/form-data" onsubmit="validateCaptcha()" >
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<label for="message">Your message:</label>
<textarea id="message" maxlength="500" type="text" name="message" required
placeholder="Write your message here."></textarea>
<div id="captcha"></div>
<input type="text" placeholder="Copy the code here." id="cpatchaTextBox"/>
<input type="submit" value="SEND" name="submit" id="submit" >
</form>
PHP(扩展名):
<?php
if(isset($_POST['submit'])){
$to = "myname@gmail.com"; // this is my Email address
$from = $_POST['email']; // this is the sender's Email address
$name = $_POST['name'];
$subject = "Web message";
$message = $_POST['message'];
$headers = "From:" . $from;
$headers2 = "From:" . $to;
mail($to,$subject,$headers,$message);
mail($from,$subject,$headers2,$message); // sends a copy of the message to the sender
echo "Message sent. " . "\n\n" . " Thank you, " . $name . ", we will be in touch.";
}
?>
我在这里找到的额外SMTP代码:
<?php
$mail->Mailer = "smtp";
$mail->Host = "ssl://smtp.gmail.com";
$mail->Port = 465;
$mail->SMTPAuth = true;
$mail->Username = "myname@gmail.com";
$mail->Password = "mypassword123";
?>
JAVASCRIPT验证:
var code;
function createCaptcha() {
//clear the contents of captcha div first
document.getElementById('captcha').innerHTML = "";
var charsArray =
"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@!#$%^&*";
var lengthOtp = 6;
var captcha = [];
for (var i = 0; i < lengthOtp; i++) {
//below code will not allow Repetition of Characters
var index = Math.floor(Math.random() * charsArray.length + 1); //get the next character from the array
if (captcha.indexOf(charsArray[index]) == -1)
captcha.push(charsArray[index]);
else i--;
}
var canv = document.createElement("canvas");
canv.id = "captcha";
canv.width = 100;
canv.height = 50;
var ctx = canv.getContext("2d");
ctx.font = "25px Georgia";
ctx.strokeText(captcha.join(""), 0, 30);
//storing captcha so that can validate you can save it somewhere else according to your specific requirements
code = captcha.join("");
document.getElementById("captcha").appendChild(canv); // adds the canvas to the body element
}
function validateCaptcha() {
event.preventDefault();
debugger
if (document.getElementById("cpatchaTextBox").value == code) {
alert("Thank you for your message. We will be in touch.");
window.location.reload();
}else{
alert("Sorry. Try it again.");
createCaptcha();
}
}
1条答案
按热度按时间envsm3lx1#
当表单开始提交时,运行
validateCaptcha
。首先要做的是调用
event.preventDefault
,它阻止表单提交。稍后调用
window.location.reload
,它使用GET请求重新加载页面,因此$_POST['submit'])
没有设置。如果要提交数据,请不要取消操作。