2015-04-18 5 views
0

Я пытаюсь использовать PHPMailer для отправки электронной почты с подтверждением и завершения нового запроса пользователя на мой сайт. Когда я тестирую локально, все работает нормально, и я получаю ожидаемую электронную почту с моей учетной записи электронной почты outlook.com. Однако, как только я загружу на свой сервер веб-хостинга, он не работает. Поскольку я использую мой адрес outlook.com, я не вижу, что нужно менять. Я связался с поддержкой моего хозяина, и у них нет подсказки. Во всяком случае, вот ответ от моего веб-хостинга:PHPMailer для отправки электронной почты с подтверждением электронной почты не работает, когда REMOTE

SERVER -> CLIENT: 220-a2ss15.a2hosting.com ESMTP Exim 4.84 #2 Sat, 18 Apr 2015 11:31:25 -0400 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail. 
CLIENT -> SERVER: EHLO williamsrn.com 
SERVER -> CLIENT: 250-a2ss15.a2hosting.com Hello a2ss15.a2hosting.com [75.98.175.95]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP 
CLIENT -> SERVER: STARTTLS 
SERVER -> CLIENT: 220 TLS go ahead 
CLIENT -> SERVER: EHLO williamsrn.com 
SERVER -> CLIENT: 250-a2ss15.a2hosting.com Hello a2ss15.a2hosting.com [75.98.175.95]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250 HELP 
CLIENT -> SERVER: AUTH LOGIN 
SERVER -> CLIENT: 334 VXNlcm5hbWU6 
CLIENT -> SERVER: bWljcm90ZWNjb25zdWx0aW5nQG91dGxvb2suY29t 
SERVER -> CLIENT: 334 UGFzc3dvcmQ6 
CLIENT -> SERVER: d29ud29uKiEx 
SERVER -> CLIENT: 535 Incorrect authentication data 
SMTP ERROR: Password command failed: 535 Incorrect authentication data 
CLIENT -> SERVER: QUIT 
SERVER -> CLIENT: 221 a2ss15.a2hosting.com closing connection 
SMTP connect() failed. 
Mailer Error: SMTP connect() failed. 

Вот мой PHP, чтобы обработать новый запрос пользователя и форма отправки сообщения электронной почты с PHPMailer:

<?php 
/* REMOTE ONLY */ 
set_include_path(".:/usr/lib/php:/usr/local/lib/php:/home/william5/php/includes"); 

include 'db_connect.php'; 
require 'PHPMailer-master/PHPMailerAutoload.php'; 

$fname = $conn->escape_string($_POST['fName']); 
$lname = $conn->escape_string($_POST['lName']); 
$coname = $conn->escape_string($_POST['coName']); 
$email = $conn->escape_string($_POST['inputEmail']); 
$hash = md5(rand(0,1000)); 
$pass = $conn->escape_string(md5($_POST['inputPassword'])); 
$fullName = $fname . $lname; 

$sql = "INSERT INTO users (first_name, last_name, corp_name, email, password, hash) " 
    . "VALUES ('$fname', '$lname', '$coname', '$email', '$pass', '$hash')"; 

if ($conn->query($sql) === TRUE) { 
//echo "New record created successfully!<br>"; 


    $addy = "verifyEmail.php?qa=$email&qh=$hash"; 

    $message = "Hello $fname! <br>" 
     . "Please click the link below to confirm your email and complete the registration process.<br>" 
     . "You will be automatically redirected to a welcome page where you can then sign in.<br><br>"    
     . "Please click below to activate your account:<br>" 
     . "<a href='$addy'>Click Here!</a>"; 

    $mail = new PHPMailer; 

    $mail->SMTPDebug = 2;         // Enable verbose debug output 
    $mail->Debugoutput = 'html'; 

    $mail->isSMTP();          // Set mailer to use SMTP 
    $mail->Host = 'smtp-mail.outlook.com';     // Specify main and backup SMTP servers 
    $mail->SMTPAuth = true;         // Enable SMTP authentication 
    $mail->Username = '[email protected]';    // SMTP username 
    $mail->Password = '********';       // SMTP password I removed this for my privacy 
    $mail->SMTPSecure = 'tls';        // Enable TLS encryption, `ssl` also accepted 
    $mail->Port = 587;          // TCP port to connect to 
    $mail->From = '[email protected]'; 
    $mail->FromName = 'GOD'; 
    $mail->addAddress($email, $fullName);     // Add a recipient 
    $mail->addReplyTo('[email protected]', 'Information'); 
    $mail->isHTML(true);         // Set email format to HTML 
    $mail->Subject = 'Account registration confirmation'; 
    $mail->Body = $message;        //HTML Message (if true) 
    $mail->AltBody = 'alt body message'; 
try { 
    $success = $mail->send(); 

    if($success) { 
     echo "A confirmation email has been sent to $email with a link to activate your account. <br><br>Please check your email and select the link to complete your registration.";   
    }else{ 
     echo "Mailer Error: " . $mail->ErrorInfo; 
    } 

} catch (Exception $ex) {  
    echo $ex;  
} 

} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 

$conn->close(); 
?> 

То, что я не понимаю, что ничего не изменилось (и не должно), поскольку SMTP переходит с моего локального на удаленный сервер, но когда я запускаю код удаленно, он не работает. Я добавил include_path наверху для пакета PHPMailer, но я знаю, что он работает, потому что я требую его чуть ниже. Мне также нужно изменить настройки моей базы данных в db_connect.php, но я знаю, что он также работает, потому что он создает запись в базе данных. Любая помощь будет принята с благодарностью. Спасибо, John

+0

BTW, поле пароля на самом деле является моим паролем, а не ******. Я положил это на свою личную жизнь. Благодарю. – John

ответ

1

Ваш интернет-провайдер перенаправляет вас на свой почтовый сервер.

В вашем скрипте вы указываете, что хотите подключиться к smtp-mail.outlook.com, но вы подключаетесь к a2ss15.a2hosting.com, который, как я подозреваю, не имеет ничего общего с Outlook.com, но все, что связано с a2hosting, являющимся вашим интернет-провайдером. Прочитайте все документы, предоставленные вашим хостом, и откройте для них билет поддержки, чтобы отключить это перенаправление.

Это указано в the PHPMailer troubleshooting guide.

Именно поэтому вы должны включить шифрование и проверить сертификаты (по умолчанию в PHP 5.6, но не до этого), потому что то, что они делают, является атакой «человек в середине» и эффективно раскрывает ваш пароль к этому неизвестному (к счастью, не слишком неизвестному в этом случае) третьему лицу.

+0

+! Вы получили мой первый +1! Очень хорошо, спасибо. После перехода на a2ss15.a2hosting.com все сработало нормально. Я буду изучать шифрование и проверку сертификатов. – John

+0

Рад, что это сработало. Не забудьте также выбрать его в качестве предпочтительного ответа - нажмите галочку рядом с кнопкой +1! – Synchro

2

Поскольку у меня недостаточно комментариев, я расскажу вам здесь. Проблема может быть связана с вашей аутентификацией, потому что вы можете подключиться к SMTP в порядке. Пожалуйста, не вставляйте то, что отправлено с сервера SMTP, и потому что они закодированы в base64. Это означает, что вы показываете свое имя пользователя и пароль в base64. Если вы декодируете VXNlcm5hbWU6, вы должны получить Username:. И ваш ответ bWljcm90ZWNjb25zdWx0aW5nQG91dGxvb2suY29t будет декодирован как [email protected].

Итак, я думаю, вам нужно изменить свой пароль, потому что вы обнаружили в своем вопросе. Вы можете проверить свои настройки.

+0

Спасибо, что сообщили мне, и я изменю свой пароль. Однако, глядя на декодированную base64, мой пароль верен, но я все еще получаю эту ошибку. – John

+0

После долгого времени я понял, что это была первая строка, если ответ: – John

Смежные вопросы