Отправка почты Php SMTP работает только локально

Я уже несколько часов пытаюсь заставить почтовый скрипт работать на живом сервере. Он работает по назначению на моем локальном хосте.

Я использую точно такой же внешний SMTP-сервер, те же источники PHP и те же базы данных. Версия PHP и версия MySQL в сети и на локальном хосте идентичны.

Я все протестировал. Все работает так, как предполагалось, без физического процесса отправки. Он не отправляет (или получает) электронную почту. Я также пошел к системному администратору, чтобы он проверил, нет ли заблокированных писем или внутренних ошибок сервера, но и здесь все в порядке.

Я действительно пробовал все, что мог придумать, но не нашел проблемы. Кто-нибудь знает, что я могу попробовать дальше?

Вот так выглядит функция физической отправки:

private function sendPhysical($sReciepient) {
    if ($oSmtpIn = fsockopen(SMTPSERVER, SMTPPORT)) {
        fputs($oSmtpIn, "EHLO " . SMTPSERVER . "\r\n");
        $aCodes["hello"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, "auth login\r\n");
        $aCodes["res"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, $this->encodeUser() . "\r\n");
        $aCodes["user"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, $this->encodePassword() . "\r\n");
        $aCodes["pass"] = fgets($oSmtpIn, 256);

        fputs($oSmtpIn, "MAIL FROM: <" . $this->sFrom . ">\r\n");
        $aCodes["From"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, "RCPT TO: <" . $sReciepient . ">\r\n");
        $aCodes["To"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, "DATA\r\n");
        $aCodes["data"] = fgets($oSmtpIn, 1024);

        fputs($oSmtpIn, $this->generateHeader($sReciepient) . "\r\n\r\n" . $this->returnCompiledTemplate() . "\r\n.\r\n");
        $aCodes["send"] = fgets($oSmtpIn, 256);

        fputs($oSmtpIn, "QUIT\r\n");
        fclose($oSmtpIn);
    } else {
        $aCodes["connection"] = false;
    }
    return $aCodes;
}

Кто-нибудь возможное решение? Я совершенно запутался, потому что он работает на локальном хосте и уже работал на онлайн-сервере до прошлой недели...


person J-H    schedule 21.01.2013    source источник
comment
Ну и в чем собственно ошибка? Что вы видите/получаете? Скорее всего, вам придется взглянуть на сетевой уровень. Возможно, вы заметили какую-то проблему в ответе сервера. Бьюсь об заклад, это связано с ретрансляцией. Может быть, вы используете smtp-сервер вашего интернет-провайдера? Если это так: проблема с ретрансляцией, правила сервера не допускают никого извне (вашего онлайн-сервера) для ретрансляции сообщений через него.   -  person arkascha    schedule 21.01.2013
comment
Я не вижу никакой фактической ошибки, кроме того, что письма не отправляются. Нет, я использую smtp-сервер фирмы, в которой я стажер (я все еще студент). Системный администратор проверил логи, но ничего не нашел.. :/   -  person J-H    schedule 21.01.2013
comment
ничего не перестает работать внезапно. Если ваш код не изменился, то это должна быть остальная часть сети, где произошли изменения. Как уже было сказано, Relays/MTA?   -  person SparKot    schedule 21.01.2013
comment
но как может случиться, что если я получаю доступ к smtp с моего локального компьютера, он работает, а если я загружаю, он больше не работает? это кажется мне нелогичным.. это точно такой же smtp-сервер..   -  person J-H    schedule 21.01.2013
comment
Так что же вы получаете внутри этих ответов, которые вы читаете и сохраняете в переменных в своем коде? Вы, кажется, не оцениваете их, поэтому неудивительно, что вы не видите ошибки...   -  person arkascha    schedule 21.01.2013
comment
Новый инцидент: теперь это сработало для 1 электронного письма. Я ничего не менял, и теперь я получил 1 единственное электронное письмо. Но если я повторю это, я не получу другой. Должна ли это быть проблема с сервером??   -  person J-H    schedule 21.01.2013


Ответы (1)


Это также довольно сложно понять, что не так с этим блоком кода, но если вы не хотите иметь особых проблем с отправкой почты через php, попробуйте PHPMailer.

person kennycoder    schedule 21.01.2013