这伤了我的大脑。我在两个单独的服务器上有完全相同的代码。它在一个中发送SMTP邮件而没有问题,而在另一个中失败。控制台很干净。而且我无法调试任何东西,因为我不知道到底是什么失败了。我可以借一双眼睛吗?
这是带有验证码的简单表格。通过或失败后,将以成功/失败模式进行回答。如果失败,它将停留在联系页面上以更正错误并重新发送。如果通过,它将在关闭成功模式后刷新屏幕。
我的联系人页面public int orderDigits(int a) {
String str = a + "";
char[] charArray = str.toCharArray();
Arrays.sort(charArray);
if (a>0)
{
String Sorted = new String(charArray);
return Integer.parseInt(Sorted);
}
else if (a<0)
{
int size = 1;
while(a!=0){
size++;
a /= 10;
}
String tempStr = new String(charArray);
String withoutMinus = tempStr.substring(1);
String withoutZero = withoutMinus.substring(0, withoutMinus.length());
StringBuffer sb = new StringBuffer(withoutZero);
sb.reverse();
String revStr = sb + "";
return -(Integer.parseInt(revStr));
}
else{
return 0;
}
}
:
<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>
我的sendContactMail.php脚本
<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>
我在其他站点中运行的设置完全相同,也可以正常运行。我没看到什么?它如何在一台服务器上工作而不在另一台服务器上工作?
我知道在此处发布真实站点不是一个好习惯,但是如果您希望看到它们通过并失败,也许可以帮助您进行某种调试,则可以。这是警察局的网站。完全安全。
Failing site(来自我无法控制的专用服务器)
Passing Site(来自HostGator)
非常感谢您。这是我捐赠的公益网站,因此我只能招募到多少帮助
答案 0 :(得分:1)
最近,我在PHP Mailer中遇到了非常相似的问题。首先,我们知道它必须与服务器做一些事情,因为站点可以在开发服务器上工作,而不能在实时服务器上工作。该错误最有可能是由于 SMTP服务器连接不起作用或实时系统中的SMTP服务器拒绝了您的邮件请求 (但是,可能已经出问题了)由于不同的PHP版本,不同的变量,不同的php.ini,...),您的代码会更早。
因此,我们必须进行调试才能发现问题。调试PHPMailer的资料非常丰富:https://github.com/PHPMailer/PHPMailer/wiki/SMTP-Debugging
这是您应该尝试调试问题(缩短代码)的方式:
//Create a new PHPMailer instance
$mail = new PHPMailer;
$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');
$mail->Subject = $_POST['subject'];
$mail->isHTML(true);
$mail->Body = "...";
$mail->SMTPDebug = 4; // Lowest level, you may also use 1, 2 or 3
$mail->Debugoutput = 'text'; // if this does not work, use 'error_log' or even a custom closure
var_dump($mail);
$send = $mail->send());
var_dump($send);
如果出现问题,您应该立即在var_dump
或SMTPDebug
和Debugoutput
属性创建的输出中看到问题。
造成问题的各种可能原因,关键是在实际环境中(但不一定在实际站点上)正确地调试代码。
如果$mail->Debugoutput='text';
不起作用,请尝试'error_log'
并查看日志文件,甚至为此编写一个自定义闭包(请参阅文档)。