我一直在使用https://github.com/jonmbake/bootstrap3-contact-form作为构建表单的快速方法,但稍微修改它以适应我们想要的设计。这使用
getenv('THINGNAME');
<。>在.htaccess内设置电子邮件,密码,主机名等
表单目前正在运行,并且在控制台中显示没有错误,但是当我在发送测试邮件后检查邮件帐户时,即使在垃圾邮件文件夹中也没有新邮件。
此处是指向页面http://mtmlegal.co.uk/contact.html
的直接链接认为这可能是因为那个git有一个过时的PHPmailer版本导致了这个问题,我更新了必要的文件,它似乎没有任何明显的区别。
我知道类似的问题1,但该实例不适用于phpmailer,所以我认为这个案例不同,足以保证自己的问题。
我还快速检查了日志,看看它们是否可能被服务器退回,发现服务器报告的交付成功但邮箱中仍然没有
这是推送到PHPMailer的sendmail php:
<?php
/**
* Sets error header and json error message response.
*
* @param String $messsage error message of response
* @return void
*/
function errorResponse ($messsage) {
header('HTTP/1.1 500 Internal Server Error');
die(json_encode(array('message' => $messsage)));
}
/**
* Pulls posted values for all fields in $fields_req array.
* If a required field does not have a value, an error response is given.
*/
function constructMessageBody () {
$fields_req = array("name" => true, "email" => true, "message" => true);
$message_body = "";
foreach ($fields_req as $name => $required) {
$postedValue = $_POST[$name];
if ($required && empty($postedValue)) {
errorResponse("$name is empty.");
} else {
$message_body .= ucfirst($name) . ": " . $postedValue . "\n";
}
}
return $message_body;
}
header('Content-type: application/json');
//do Captcha check, make sure the submitter is not a robot:)...
$url = 'https://www.google.com/recaptcha/api/siteverify';
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query(array('secret' => getenv('RECAPTCHA_SECRET_KEY'), 'response' => $_POST["g-recaptcha-response"]))
)
);
$context = stream_context_create($opts);
$result = json_decode(file_get_contents($url, false, $context, -1, 40000));
if (!$result->success) {
errorResponse('reCAPTCHA checked failed! Error codes: ' . join(', ', $result->{"error-codes"}));
}
//attempt to send email
$messageBody = constructMessageBody();
require 'php_mailer/PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->CharSet = 'UTF-8';
$mail->isSMTP();
$mail->Host = getEnv('FEEDBACK_HOSTNAME');
if (!getenv('FEEDBACK_SKIP_AUTH')) {
$mail->SMTPAuth = true;
$mail->Username = getenv('FEEDBACK_EMAIL');
$mail->Password = getenv('FEEDBACK_PASSWORD');
}
if (getenv('FEEDBACK_ENCRYPTION') == 'TLS') {
$mail->SMTPSecure = 'tls';
$mail->Port = 587;
} elseif (getenv('FEEDBACK_ENCRYPTION') == 'SSL') {
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
}
$mail->Sender = getenv('FEEDBACK_EMAIL');
$mail->setFrom($_POST['email'], $_POST['name']);
$mail->addAddress(getenv('FEEDBACK_EMAIL'));
$mail->Subject = $_POST['reason'];
$mail->Body = $messageBody;
//try to send the message
if($mail->send()) {
echo json_encode(array('message' => 'Your message was successfully submitted.'));
} else {
errorResponse('An unexpected error occured while attempting to send the email: ' . $mail->ErrorInfo);
}
?>
除了更改路径和日志级别外,我还没有更改PHPmailer中的文件。