2015-01-02 5 views
0

Я работаю над проектом небольших электронных открыток. Мне нужно отправить электронные письма с моего удаленного сервера с помощью PHPMailer.PHPMailer на удаленном хосте не работает

localy Я использую эту конфигурацию (с моим собственным адресом электронной почты Gmail), и она отлично работает.

/ssi/mail.config.php

<?php 

$mail = new PHPMailer(true); 
$mail->CharSet  = 'utf-8'; 
$mail->SMTPDebug = 2; 
$mail->isSMTP(); 
$mail->Host   = 'smtp.gmail.com'; 
$mail->Port   = '587'; 
$mail->SMTPSecure = 'tls'; 
$mail->SMTPAuth  = true; 
$mail->Username  = '[email protected]'; 
$mail->Password  = '***secret***'; 
$mail->SMTPSecure = 'tls'; 
?> 

На моем удаленном сервере (размещенный на one.com) Я создал учетную запись электронной почты для домена. Я изменил хост и порт, как сказал служба поддержки ... но я не понимаю, как это работает.

<?php 
'ssi/mail.config.php' 
$mail = new PHPMailer(true); 
$mail->CharSet  = 'utf-8'; 
$mail->SMTPDebug = 2; 
$mail->isSMTP(); 
$mail->Host   = 'send.one.com'; 
$mail->Port   = '25'; 
$mail->SMTPSecure = 'none'; 
$mail->SMTPAuth  = true; 
$mail->Username  = '[email protected]'; 
$mail->Password  = '***secret***'; 
$mail->SMTPSecure = 'none'; 
?> 

Еще раз спасибо!

+0

Можете ли вы не просто использовать функцию php 'mail'? – Core

+0

Ваш хост разрешает аутентификацию SMTP? или вы включили его? –

+0

Обычная функция php mail() действует немного неправильно, но я не пытаюсь отправлять письма с этим удаленным способом. Да, исходящие письма с веб-страницы поддерживаются, только оттуда SMTP-сервер с электронной почтой в домене. –

ответ

2

Вы не сказали, как это происходит, что затрудняет диагностику.

Я действительно не рекомендовал бы никакой сервис, который использует аутентификацию без шифрования. Нет смысла устанавливать SMTPSecure на «none» - просто установите его в пустую строку (или не установите ее вообще), если вы не хотите использовать SSL или TLS, и вам нужно сделать это только один раз (не дважды как в вашем коде).

2

Посмотрите на страницу one.com, есть несколько ошибок в этом. Для smtp они говорят, что используют порт 465 с шифрованием SSL. Таким образом, ваш код должен быть:

$mail = new PHPMailer(true); 
$mail->CharSet  = 'utf-8'; // You can remove this line, utf-8 is the default. 
$mail->SMTPDebug = 2; 
$mail->isSMTP(); 
$mail->Host   = 'send.one.com'; 
$mail->Port   = 465; 
$mail->SMTPSecure = 'ssl'; 
$mail->SMTPAuth  = true; 
$mail->Username  = '[email protected]'; 
$mail->Password  = '***secret***'; 

Также стоит отметить, - и что-то, что мне потребовалось много времени, чтобы найти: Мой SMTP-серверу требуется аутентификация для отправки по электронной почте. Я предположил, что SMTPAuth = true; позаботился об этом, но этого не произошло. Я заметил, что one.com также работает - то есть они говорят вам нажать кнопку в Outlook, в которой говорится, что ваш исходящий сервер требует аутентификации.

я, наконец, получил его на работу, поставив это в верхней части моего файла:

$pop = new POP3(); 
$pop->Authorise("send.one.com", 465, 30, "[email protected]", "***secret_password***", 1); 

Это заботится о проверке подлинности. Затем вы можете перейти в $mail = new PHPMailer(true) и установить все свои параметры и отправить почту.

Так весь ваш файл должен выглядеть следующим образом:

$pop = new POP3(); 
$pop->Authorise("send.one.com", 465, 30, "[email protected]", "***secret_password***", 1); 



$mail = new PHPMailer(true); 
$mail->CharSet  = 'utf-8'; // You can remove this line, utf-8 is the default. 
$mail->SMTPDebug = 2; 
$mail->isSMTP(); 
$mail->Host   = 'send.one.com'; 
$mail->Port   = 465; 
$mail->SMTPSecure = 'ssl'; 
$mail->SMTPAuth  = true; 
$mail->Username  = '[email protected]'; 
$mail->Password  = '***secret***'; 
+0

Привет, это работает отлично! Спасибо за вашу работу и время!Я уже включил переключатель в обычную функцию php mail(). Но теперь я могу использовать эту конфигурацию PHPMailer. :) Еще раз спасибо –

+0

BTW UTF-8 не является по умолчанию 'CharSet' в PHPMailer; это ISO-8859-1. – Synchro

+0

Вы действительно нашли хост, который все еще использует POP-before-SMTP auth ?? Кажется, я в последний раз видел, что в начале 1990-х годов ... – Synchro

0

Другие решения не работают для меня; этот номер сделал:

$mail->isSMTP(); 
$mail->Host = 'mailout.one.com'; 
$mail->SMTPAuth = false;       // disable SMTP authentication 
$mail->Username = '[your one.com-email]'; 
$mail->Password = '[your one.com-email password]'; 
$mail->SMTPSecure = '';       // leave this blank! 
$mail->Port = 25; 

Сообщите мне, если это вам тоже помогло!

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