我有一个基本上有3个单选按钮的表单,可以让你选择一个你想要联系的工作人员。表单需要姓名,电子邮件和消息。我找不到它告诉我错误是什么。我有调试但不知道错误来自哪里。
我的目标是拥有它以便他们选择的人将通过电子邮件发送,并且当电子邮件发送时,它将被重定向到具有正确的工作人员信息的页面。然而,对于我的生活,我无法让这个工作。我相信一切正常但是当我插入我在SO上找到的代码连接到SMTP服务器并通过电子邮件发送联系表单输入时,我的formProcess.php会中断。
编辑:在这里的一些人的帮助下,我找到了解决我遇到的两个错误的方法。但是现在我已经修复了这些错误,我得到了一个不同的错误。我现在收到这个:
2015-12-23 04:42:59 SMTP错误:无法连接服务器:无法分配内存(12)2015-12-23 04:42:59 SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting 2015-12-23 04:42:59 SMTP错误:无法连接服务器:无法分配内存(12)2015-12-23 04:42:59 SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
警告:无法修改标题信息 - 已在第80行的/www/contact/formProcess.php中发送的标题(///tact/phpmailer/class.smtp.php:234开始输出)
编辑2:我已将其上传到我的托管服务器。它解决了上面提到的错误。我现在遇到密码失败的问题,即使我已使用我在代码中使用的密码登录。
,而不是复制/粘贴错误消息,您可以在my site上看到它编辑3 我刚刚注意到Gmail发来一封电子邮件,说“有人试图通过不符合标准安全标准的应用登录您的Google帐户。”这不可能是巧合吗?这是我无法连接的原因吗?如果是这样,我该怎么做才能达到安全标准?
编辑4:我现在一切正常,除了两件事。 1,由于某种原因,它发送电子邮件两次。我不知道为什么,但我觉得我可以搞清楚。我现在遇到的真正问题是我现在想要将Googles 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.';
};
而bellow是处理表单的所有代码。
<?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');
?>
答案 0 :(得分:0)
尝试通过在脚本顶部添加以下代码来显示错误:
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
如果您收到服务器错误500,请尝试注释掉小块代码,直到脚本运行。这样你就可以发现问题。