我有一个表单,它基本上有3个单选按钮,可以让你选择你想联系的员工。该表格需要姓名、电子邮件和信息。我找不到它告诉我错误是什么。我正在调试,但不知道错误是从哪里来的。
我的目标是拥有它,这样他们选择的人就会收到电子邮件,当电子邮件发送时,它会被重定向到一个有正确员工信息的页面。然而,就我而言,我无法让它发挥作用。我相信一切都是正确的,但当我插入我在SO上找到的代码以连接到SMTP服务器并通过电子邮件发送联系人表单时,我的formProcess.php中断了。
编辑:在在座各位的帮助下,我找到了解决我遇到的两个错误的方法。然而,现在我已经修复了这些错误,我得到了一个不同的错误。我现在收到这个:
2015-12-23 04:42:59 SMTP错误:无法连接到服务器:无法分配内存(12)2015-12-23 104:42:59 SMTPconnect()失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting2015-12-23 04:42:59 SMTP错误:无法连接到服务器:无法分配内存(12)2015-12-23 04:42:59 SMTP connect()失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
警告:无法修改标头信息-标头已由(输出起始于/www/contact/phpmailer/class.smtp.php:234)在/www/connect/formProcess.php第80行发送
编辑2:我已将其上传到我的托管服务器。它解决了上述错误。我现在遇到了密码失败的问题,尽管我已经使用代码中使用的密码登录。你可以在我的网站上看到它,而不是复制/粘贴错误消息。
第3版:我刚刚注意到Gmail发来了一封电子邮件,上面写着"有人试图从不符合标准安全标准的应用程序登录你的谷歌帐户。"这不可能是巧合吧?这就是我无法连接的原因吗?如果是,我该怎么做才能达到安全标准?
第4版:除了两件事,我现在一切都很好。1,出于某种原因,它发送了两次电子邮件。我不知道为什么,但我觉得我能弄清楚。我现在遇到的真正问题是,我现在想把谷歌的reCAPTCHA也包括在我的表单中。一切都很好,直到我添加了这段代码,我认为这段代码可以验证reCAPTCHA是否成功,是否只是在我的代码中添加了一个错误,而是在我输入下面的代码之后,我的代码中断了。
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => [
'secret'=>'Well it says secret for a reason!',
'response'=> $_POST['g-recaptcha-response']
]
]);
$response = json_decode(curl_exec($curl));
if (!$response->success){
$errors[] = 'There was a problem with reCAPTCHA, please try again.';
};
下面是处理表单的所有代码。
<?php
session_start();
ini_set('display_errors', 1); error_reporting(E_ALL);
require_once 'PHPMailerAutoload.php';
$errors = [];
$toWho ='';
if(isset($_POST['name'], $_POST['email'], $_POST['message'], $_POST['who'])){
$fields = [
'name' => $_POST['name'],
'email' => $_POST['email'],
'message' => $_POST['message'],
'who' => $_POST['who']
];
foreach($fields as $field => $data) {
if(empty($data)) {
$errors[] ='The ' .$field. ' field is required.';
}
}
if ($fields['who'] == "staff1") {
$toWho = 'staff1@domain.com';
} else if ($fields['who'] == "staff2") {
$toWho = 'staff2@domain.com';
} else {
$toWho = 'staff3@domain.com';
}
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://www.google.com/recaptcha/api/siteverify',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => [
'secret'=>'Well it says secret for a reason!',
'response'=> $_POST['g-recaptcha-response']
]
]);
$response = json_decode(curl_exec($curl));
if (!$response->success){
$errors[] = 'There was a problem with reCAPTCHA, please try again.';
};
if(empty($errors)) {
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->smtpSecure = 'tls';
$mail->Port = 587;
// $mail->SMTPDebug = 3;
$mail->Host = 'mailen3.cloudsector.net';
$mail->From = "No-reply@domain.com";
$mail->Username = 'No-Reply@domain.com';
$mail->Password = 'PAsswoRD';
$mail->SetFrom("No-reply@domain.com", "No Reply" );
$mail->AddReplyTo($fields['email'], $fields['name']);
$mail->AddAddress($toWho, $fields['who']);
$mail->Subject = $fields['name'] . ' wants to talk!';
$mail->Body = 'From: ' .$fields['name']. ' (' .$fields['email']. ') ' .$fields['message']. ;
$mail->send();
if($mail->send()) {
header('Location: ../../' .$fields['who']. 'thanks.php');
die();
}else {
$errors[] = 'Sorry! Something went wrong and your message could not be sent. Please try again ';
}
}
} else {
$errors[] = 'Something went wrong.';
}
$_SESSION['errors'] = $errors;
$_SESSION['fields'] = $fields;
header('Location: index.php');
?>
尝试在脚本顶部添加以下代码来显示错误:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
如果您收到服务器错误500,请尝试注释掉小块代码,直到脚本工作为止。这样你就可以发现问题了。