HTML表单与PHP不从我的网站发送到我的Gmail帐户[重复]

ijxebb2r  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(114)
    • 此问题在此处已有答案**:

(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();
  }
}
envsm3lx

envsm3lx1#

当表单开始提交时,运行validateCaptcha
首先要做的是调用event.preventDefault,它阻止表单提交
稍后调用window.location.reload,它使用GET请求重新加载页面,因此$_POST['submit'])没有设置。
如果要提交数据,请不要取消操作。

相关问题