не работает функция php mail на виртуальном выделенном сервере

Статус
В этой теме нельзя размещать новые ответы.

vilk108

Профессор
Регистрация
17 Дек 2007
Сообщения
174
Реакции
39
не работает функция php mail на виртуальном выделенном сервере. В чем может быть проблема. Функция работала, а потом перестала. Хоть мы на сервере ничего не трогали. через WebMail письма приходят и уходят хорошо. Только функция mail не работает не на каком домене который мы ставим у себя на сервере. Также хотелось бы знать по какому принципу отправляются письма через функцию php mail? Как эта функция может выглядить внутри? И можно ли отправлять письма не используя эту функцию?
 
1. проверь простым методом вообще функция майл функционирует или нет
2. если да, то возможно трабла в ЦЭпанели. (у мея было пару раз ...пока мыло по-умолчанию не выставил не работало...

это навскидку.... если не поможет 0стучись хостеру и ругайсо.
 
чаще всего в таких случаях хостеры отвечают отказом.
советую завести смтп сервер для этих целей. а код заменить - вместо mail использовать функциональнийшую и в то же время очень простую в использовании библиотеку swift
 
не работает функция php mail на виртуальном выделенном сервере. В чем может быть проблема. Функция работала, а потом перестала. Хоть мы на сервере ничего не трогали. через WebMail письма приходят и уходят хорошо. Только функция mail не работает не на каком домене который мы ставим у себя на сервере. Также хотелось бы знать по какому принципу отправляются письма через функцию php mail? Как эта функция может выглядить внутри? И можно ли отправлять письма не используя эту функцию?

а ты как проверял ее?
Возможно на сервере сменили STMP/POP -сервер или же настройки сервера слетели.
размести у себя такой код:


если не сработает то значит на сервере кривые настройки функции PHP-Mail они редактируются в php.ini

Вот еще пример отправки почты через SMTP

 
у него есть сендмайл тока не прописан он в php.ini
 
If you're using a linux server using Postfix, and your server hasn't the host name set to a valid name (because it's behind a firewall in an intranet), it's possible that when sending mails using the mail function, some mail servers reject them. This is because they can't check the return path header. If you want to change the Return-Path used by sendmail init the php.ini and edit the sendmail_path variable to this:

sendmail_path = "sendmail -t -i -F webmaster@yoursite.com -f webmaster@yoursite.com"
 
Как я знаю не на всех vps есть поддержка писем.
 
Как вариант можно через Socket

Добавлено через 14 минут
PHP:
<?
    header('Content-Type: text/plain;');
    error_reporting(E_ALL ^ E_WARNING);
    ob_implicit_flush();

    $address = 'localhost'; // адрес smtp-сервера
    $port    = 25;          // порт (стандартный smtp - 25)
    
    $login   = 'novice';    // логин к ящику
    $pwd     = 'novice';    // пароль к ящику
    
    $from    = 'novice@localhost.ru';  // адрес отправителя
    $to      = 'novice@localhost.ru';  // адрес получателя
    
    $subject = 'Message subject';       // тема сообщения
    $message = 'Message text';          // текст сообщения

    try {
        
        // Создаем сокет
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($socket < 0) {
            throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
        }

        // Соединяем сокет к серверу
        echo 'Connect to \''.$address.':'.$port.'\' ... ';
        $result = socket_connect($socket, $address, $port);
        if ($result === false) {
            throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
        } else {
            echo "OK\n";
        }
        
        // Читаем информацию о сервере
        read_smtp_answer($socket);
        
        // Приветствуем сервер
        write_smtp_response($socket, 'EHLO '.$login);
        read_smtp_answer($socket); // ответ сервера
        
        echo 'Authentication ... ';
            
        // Делаем запрос авторизации
        write_smtp_response($socket, 'AUTH LOGIN');
        read_smtp_answer($socket); // ответ сервера
        
        // Отравляем логин
        write_smtp_response($socket, base64_encode($login));
        read_smtp_answer($socket); // ответ сервера
        
        // Отравляем пароль
        write_smtp_response($socket, base64_encode($pwd));
        read_smtp_answer($socket); // ответ сервера
        
        echo "OK\n";
        echo "Check sender address ... ";
        
        // Задаем адрес отправителя
        write_smtp_response($socket, 'MAIL FROM:<'.$from.'>');
        read_smtp_answer($socket); // ответ сервера
        
        echo "OK\n";
        echo "Check recipient address ... ";
        
        // Задаем адрес получателя
        write_smtp_response($socket, 'RCPT TO:<'.$to.'>');
        read_smtp_answer($socket); // ответ сервера
        
        echo "OK\n";
        echo "Send message text ... ";
        
        // Готовим сервер к приему данных
        write_smtp_response($socket, 'DATA');
        read_smtp_answer($socket); // ответ сервера
        
        // Отправляем данные
        $message = "To: $to\r\n".$message; // добавляем заголовок сообщения "адрес получателя"
        $message = "Subject: $subject\r\n".$message; // заголовок "тема сообщения"
        write_smtp_response($socket, $message."\r\n.");
        read_smtp_answer($socket); // ответ сервера
        
        echo "OK\n";
        echo 'Close connection ... ';
        
        // Отсоединяемся от сервера
        write_smtp_response($socket, 'QUIT');
        read_smtp_answer($socket); // ответ сервера
        
        echo "OK\n";
        
    } catch (Exception $e) {
        echo "\nError: ".$e->getMessage();
    }
    
    if (isset($socket)) {
        socket_close($socket);
    }
    
    // Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибки
    function read_smtp_answer($socket) {
        $read = socket_read($socket, 1024);
        
        if ($read{0} != '2' && $read{0} != '3') {
            if (!empty($read)) {
                throw new Exception('SMTP failed: '.$read."\n");
            } else {
                throw new Exception('Unknown error'."\n");
            }
        }
    }
    
    // Функция для отправки запроса серверу
    function write_smtp_response($socket, $msg) {
        $msg = $msg."\r\n";
        socket_write($socket, $msg, strlen($msg));
    }
?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху