PEAR Mail - не удалось подключиться - PullRequest
2 голосов
/ 30 ноября 2011

Это дразнило меня вот уже 3 дня.У меня установлена ​​груша, и сценарий в порядке, поскольку я использовал его во многих других проектах.У меня вопрос, по каким причинам я получу

Failed to connect to mail.domain.co.uk:25 [SMTP: Failed to connect socket: Connection timed out (code: -1, response: )]

Я пробовал несколько разных учетных записей и учетных записей gmail, код которых я использовал из stackoverflow, который имел 50+ голосов, поэтому должен работать!Есть ли какие-либо ограничения на стороне сервера, которые могут быть в наличии?Мой код выглядит следующим образом.

<?php
require_once "/usr/local/lib/php/Mail.php";

$from = "<notifications@domain.co.uk>";
$to = "<doe@domain.co.uk>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "mail.domain.co.uk";
$username = "notifications.domain.co.uk";
$password = "fu*****";

$headers = array ('From' => $from, 'To' => $to, 'Subject' => $subject);
$smtp = Mail::factory('smtp', array ('host' => $host, 'auth' => true, 'username' => $username, 'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
    echo("<p>" . $mail->getMessage() . "</p>");
} else {
    echo("<p>Message successfully sent!</p>");
}
?>

любая помощь будет очень полезной

1 Ответ

3 голосов
/ 30 ноября 2011

Я считаю, что это не имеет ничего общего с PEARMail.Попробуйте сделать telnet mail.domain.co.uk 25 с компьютера, на котором выполняется PHP.Если вы также получите тайм-аут, это не PEARMail, это сеть.Причин может быть несколько: межсетевые экраны, маршрутизация, некоторые промежуточные ссылки и т. Д.

В основном, этап отправки почты, который не выполняется, - это установление TCP-соединения с почтовым сервером на порту 25. Сначала отлаживайте, а когдавы можете установить telnet соединение - я вполне уверен, что ваш PHP тоже будет работать.

--- edit ---

Еще одна вещь пришла мне в голову.Если вы случайно запустите это на своем локальном домашнем компьютере, подключенном к стандартному домашнему оператору DSL, многие из них блокируют исходящий порт 25. В этом случае они используют так называемый smarthost, в основном ретранслятор SMTP.в собственном помещении, которое будет принимать любую почту от вас на любой адрес.Ищите его на веб-страницах вашего интернет-провайдера, они должны сообщить об этом и затем использовать его вместо mail.domain.co.uk.

--- edit2 ---

Давайте исключим PEARMailзатем.

Попробуйте следующий небольшой фрагмент кода в качестве отдельного сценария:

<?php
$fp = fsockopen("mail.domain.co.uk", 25, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    echo "I'm connected!<br />\n";
    fclose($fp);
}
?>

Это должно исключить PEARMail, так как это просто офигительная замена telnet бедного человека.

...