Это ломает мне мозг. У меня точно такой же код на двух разных серверах. Он отправляет почту SMTP без проблем в одном, а в другом отказывает. Консоль чистая. И у меня нет возможности что-либо отлаживать, так как я не знаю, что именно не удалось. Могу ли я одолжить пару глаз?
Это простая форма с капчей. После того, как он проходит или терпит неудачу, он отвечает модалом успеха / неудачи. Если это не удалось, он остается на странице контактов, чтобы исправить ошибки и отправить заново. Если он проходит, он обновляет экран после закрытия модального успеха.
Страница моего контакта <head>
:
<script>
$(document).ready(function() {
var request;
$("#contactForm").submit(function(event){
event.preventDefault();
// Abort any pending request
if (request) {
request.abort();
}
// setup some local variables
var $form = $(this);
// Let's select and cache all the fields
var $inputs = $form.find("input, select, button, textarea");
// Serialize the data in the form
var serializedData = $form.serialize();
// Let's disable the inputs for the duration of the Ajax request.
// Note: we disable elements AFTER the form data has been serialized.
// Disabled form elements will not be serialized.
$inputs.prop("disabled", true);
request = $.ajax({
url: "sendContactMail.php",
type: "post",
data: serializedData
});
// Callback handler that will be called on success
request.done(function (response, textStatus, jqXHR){
if (response.status == 0) {
// Success! Do something successful, like show success modal
jQuery.noConflict();
$('#successEmail').modal('show');
} else {
// Oh no, failure - notify the user
jQuery.noConflict();
$('#failEmail').modal('show');
}
$( "#failBtn" ).click(function() {
jQuery.noConflict();
$('#failEmail').modal('hide');
});
$( "#passBtn" ).click(function() {
window.location.reload();
});
});
// Callback handler that will be called on failure
request.fail(function (jqXHR, textStatus, errorThrown){
// Say you have a <div class="message"></div> somewhere, maybe under your form
//$('.message').html('Error: ' + textStatus + ', ' + errorThrown)
});
// Callback handler that will be called regardless
// if the request failed or succeeded
request.always(function () {
// Reenable the inputs
$inputs.prop("disabled", false);
});
});
});
</script>
Форма обратной связи:
<form id="contactForm" class="form margin-alpha-top" method="POST">
<div class="form__group">
<label class="form__label" for="inputSubject">Subject</label>
<input id="inputSubject" name="subject" type="text" class="form__field">
</div>
<div class="form__group">
<label class="form__label" for="inputName">Name *</label>
<input id="inputName" name="name" type="text" class="form__field" required="">
</div>
<div class="form__group">
<label class="form__label" for="inputEmail">E-mail *</label>
<input id="inputEmail" name="email" type="email" class="form__field" required="">
</div>
<div class="form__group">
<label class="form__label" for="inputPhone">Phone</label>
<input id="inputPhone" name="phone" type="text" class="form__field">
</div>
<div class="form__group form-group--extended">
<label class="form__label form__label--extended" for="inputMessage">Message *</label>
<textarea id="inputMessage" name="message" class="form__field form__field--extended" rows="6" required=""></textarea>
</div>
<div class="row captcha">
<div class="column-xs-12 column-sm-4 column-md-4 xs-center">
</div>
<div class="column-xs-6 column-sm-4 column-md-4 xs-center">
<img id="captcha" src="/securimage/securimage_show.php" alt="CAPTCHA Image" />
<br/>
<input type="text" name="captcha_code" size="10" maxlength="6" />
<br/>
<a href="#" id="secureText" onclick="document.getElementById('captcha').src = '/securimage/securimage_show.php?' + Math.random(); return false">
<small>Refresh Image</small>
</a>
</div>
<div class="column-xs-6 column-sm-4 column-md-4 xs-center">
<div class="form__group submit-button">
<button
type="submit"
class="form__button button button--gamma margin-beta-bottom"
id="btnSubmit">
<span class="button__text">Send</span>
</button>
</div>
</div>
</div>
</form>
Мой скрипт sendContactMail.php
<?php
session_start();
$msg = '';
use PHPMailer\PHPMailer\PHPMailer;
require './mail/PHPMailer.php';
require './mail/Exception.php';
require './mail/SMTP.php';
require './mail/PHPMailerAutoload.php';
include_once $_SERVER['DOCUMENT_ROOT'] . '/securimage/securimage.php';
$securimage = new Securimage();
//Don't run this unless we're handling a form submission
if (array_key_exists('email', $_POST)) {
date_default_timezone_set('Etc/UTC');
//Create a new PHPMailer instance
$mail = new PHPMailer;
$mail->SMTPDebug = 0; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.live.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'lotusms@outlook.com'; // SMTP username
$mail->Password = '********'; // SMTP password
$mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; // TCP port to connect to
$mail->setFrom('lotusms@outlook.com', 'Mailer');
$mail->addAddress('lotusms@outlook.com', 'Luis Silva');
$email = isset($_POST['email']) ? $_POST['email'] : null;
$subject = isset($_POST['subject']) ? $_POST['subject'] : null;
$name = isset($_POST['name']) ? $_POST['name'] : null;
$phone = isset($_POST['phone']) ? $_POST['phone'] : null;
$message = isset($_POST['message']) ? $_POST['message'] : null;
if ($mail->addReplyTo($_POST['email'], $_POST['name'])) {
$mail->Subject = $_POST['subject'];
$mail->isHTML(true);
$mail->Body = <<<EOT
<div style="width:100%">
<div><label style="color: #044F69; font-weight:bold">Subject:</label> <span>{$_POST['subject']}</span></div>
<div><label style="color: #044F69; font-weight:bold">Email:</label> <span>{$_POST['email']}</span></div>
<div><label style="color: #044F69; font-weight:bold">Name:</label> <span>{$_POST['name']}</span></div>
<div><label style="color: #044F69; font-weight:bold">Phone:</label> <span>{$_POST['phone']}</span></div>
<div><label style="color: #044F69; font-weight:bold">Message:</label> <span>{$_POST['message']}</span></div>
</div>
EOT;
if ($securimage->check($_POST['captcha_code']) == false) {
$response = [
'status'=> 1,
'msg' => 'CAPTCHA test failed!'
];
} else {
//Send the message, check for errors
if (!$mail->send()) {
// Generate a response in this failure case, including a message and a status flag
$response = [
'status'=> 1,
'msg' => 'Sorry, something went wrong. Please try again later.'
];
} else {
// Generate a response in the success case, including a message and a status flag
$response = [
'status'=> 0,
'msg' => 'Success!'
];
}
}
} else {
// Generate a response in this failure case, including a message and a status flag
$response = [
'status'=> 1,
'msg' => 'Invalid email address, message ignored.'
];
}
}
// Add the response to the session, so that it will be available after reload
$_SESSION['response'] = $response;
// Finally display the response as JSON so calling JS can see what happened
header('Content-Type: application/json');
echo json_encode($response);
?>
У меня точно такая же установка работает на других сайтах и работает правильно. Что я не вижу? Как это может работать на одном сервере, а не на другом?
Я знаю, что не стоит публиковать здесь реальные сайты, но если вы хотите, чтобы они проходили мимо и не работали, и, возможно, это поможет вам как-то отладить, вы можете. Это веб-сайт Департамента полиции. Полностью безопасен.
Сбой сайта (С выделенного сервера я не управляю)
Передача сайта (от HostGator)
Заранее большое спасибо. Это бесплатный сайт, который я пожертвовал, поэтому я ограничен объемом помощи, которую я могу нанять