我从最近两天开始尝试在JavaScript和PHP之间进行通信。在阅读了许多其他人遇到的类似问题的教程,建议和解决方案后,我无法按预期成功。可以这么说,我是在我的一个领域进行编程,而不是在本地编程。
向我的电子邮件地址发送一个格式良好的字符串,该字符串来自JavaScript中格式正确的对象。为了做到这一点,我确实理解需要用它着名的email()函数执行PHP脚本。
我的AJAX代码运行顺畅,没有错误,但不符合预期和预期。它不是跳跃/进入SUCCESS,而是立即使用ERROR定制功能,我似乎无法破译可能出错的地方。
我将在JS(AJAX调用)和我用来实现上述目标的PHP脚本下面发布。
JavaScript( 已更新 ):
function submitOnClick() {
var full_name = "John Doe";
var profile_person = "--[Name: John, Surname: Doe, Birthday: 25/02/1950]--";
var hr = new XMLHttpRequest();
hr.open("POST", "submit_to_email.php", true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.send("full_name=" + full_name + "&" + "person=" + profile_person);
hr.onreadystatechange = function () {
if (hr.readyState == 4 && hr.status == 200) {
var data = hr.responseText;
console.log("PHP responded with: " + data);
}
}
}
PHP脚本( 已更新 ):
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Content-Type: application/json');
$postvars = $_POST['person'];
//var_dump($postvars);
if (isset($postvars)) {
$to = 'to@gmail.com';
$subject = 'Subject Title';
$email_message = $postvars;
$headers = 'From: noreply@mydomain.com'."\r\n".
'Reply-To: noreply@mydomain.com'."\r\n" .
'X-Mailer: PHP/' . phpversion();
$checker = @mail($to, $subject, $email_message, $headers);
if ($checker == true) {
echo 'Mail was sent to'.$to;
}
else {
echo 'Mail was NOT sent to'.$to;
}
}
?>
<?php
die();
?>
$ .ajax()根本没有必要,而是开始使用普通的vanilla JS和XMLHttpRequest()方法。内容通过检查mail()成功发送到我的PHP文件,如果它的真/假(发送/不发送)导致 FALSE 。需要配置文件来为PHP提供SMTP设置的信息。我使用的是Arvixe托管,它安装了IIS服务器。我对网络托管和维护域有点新意,因此我不知道是否应该在项目文件夹中配置web.config文件或添加扩展的PHP配置文件。
答案 0 :(得分:0)
我认为您需要将相关代码200的成功标题放在您的答案中。
如果您使用json格式回答,则jquery会读取该代码以重定向到成功或错误处理程序。
检查标头php功能:
告诉我是否有效。答案 1 :(得分:0)
经过数天的研究,我终于找到了一种可行且非常有效的解决方案。问题在于我的域名设置为在带有IIS托管的Windows Server 2008+上运行,因此PHP的mail()函数不完整,无法执行邮件。
解决方案是并且是: PHPMailer 一个非常常见且特别是最常用的php库,专门为开发人员提供自信和简单的代码。我已经从 GitHub 来源下载了zip文件,然后将其解压缩。之后创建了一个空白的新php文件,并复制/粘贴演示脚本,如何发送邮件并根据我的需要进行更改。最后将PHPMailer文件夹和新创建的脚本上传到我的域。手动执行脚本后,我收到了收件箱中的邮件,而不是垃圾邮件。这 tutorial 救了我一命。 脚本如下:
<? php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
header('Content-Type: application/json');
$postvars = $_POST['person'];
if (isset($postvars)) {
$to = 'recipient@gmail.com';
$subject = 'Some Title';
$email_message = $postvars;
require 'PHPMailerAutoload.php'; // The script needed to be called in order to executed
// further commands below
$mail = new PHPMailer;
$mail - > isSMTP(); // Set mailer to use SMTP
$mail - > Host = 'smtp.mydomain.com'; // Specify main and backup SMTP servers
$mail - > SMTPAuth = true; // Enable SMTP authentication
$mail - > Username = 'mymail@mydomain.com'; // SMTP username
$mail - > Password = 'password_here'; // SMTP password
$mail - > SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail - > Port = 465; // TCP port to connect to
$mail - > CharSet = 'UTF-8'; // Character set specified because I use "ë" and other ones
$mail - > From = 'mymail@mydomain.com'; // The same email address as specified above for authentication
$mail - > FromName = 'Myself'; // The name of the sender (optional)
$mail - > addAddress($to, 'recipients_name'); // Add a recipient & name (optional)
$mail - > addReplyTo('mymail@mydomain.com', 'Some text'); // To who to reply
$mail - > WordWrap = 70; // Wrapping words
$mail - > isHTML(true); // if TRUE , format is HTML or FALSE, format is Plain Text
$mail - > Subject = $subject;
$mail - > Body = $email_message; //Plain or HTML formatted string
$mail - > AltBody = $email_message; //The same as Body BUT it has to be Plain text always
if (!$mail - > send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: '.$mail - > ErrorInfo;
} else {
echo 'Message has been sent';
}
}
?>