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

Тема в разделе "PHP", создана пользователем vilk108, 18 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. vilk108

    vilk108

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

    lordBlack

    Регистр.:
    29 ноя 2007
    Сообщения:
    620
    Симпатии:
    246
    1. проверь простым методом вообще функция майл функционирует или нет
    2. если да, то возможно трабла в ЦЭпанели. (у мея было пару раз ...пока мыло по-умолчанию не выставил не работало...

    это навскидку.... если не поможет 0стучись хостеру и ругайсо.
     
  3. megamen2008

    megamen2008 Создатель

    Регистр.:
    12 дек 2008
    Сообщения:
    20
    Симпатии:
    4
    чаще всего в таких случаях хостеры отвечают отказом.
    советую завести смтп сервер для этих целей. а код заменить - вместо mail использовать функциональнийшую и в то же время очень простую в использовании библиотеку swift http://www.swiftmailer.org/
     
    vilk108 нравится это.
  4. despainer

    despainer

    Регистр.:
    15 фев 2008
    Сообщения:
    615
    Симпатии:
    168
    а ты как проверял ее?
    Возможно на сервере сменили STMP/POP -сервер или же настройки сервера слетели.
    размести у себя такой код:

    <?php
    // если была нажата кнопка "Отправить"
    if($_POST['submit']) {
    // $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично
    $title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
    $mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
    // $to - кому отправляем
    $to = 'test@test.ru';
    // $from - от кого
    $from='test@test.ru';
    // функция, которая отправляет наше письмо.
    mail($to, $title, $mess, 'From:'.$from);
    echo 'Спасибо! Ваше письмо отправлено.';
    }
    ?>
    <form action="" method=post>

    <p>Вводный текст перед формой <p>
    <div align="center">
    Teма<br />
    <input type="text" name="title" size="40"><br />
    Сообщение<br />
    <textarea name="mess" rows="10" cols="40"></textarea>
    <br />
    <input type="submit" value="Отправить" name="submit"></div>
    </form>



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

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


    1. качаем библиотеку phpmailer

    2. копируем оттуда 2 файла: class.phpmailer.php и class.smtp.php

    3. в своем скрипте пишем:
    <?php
    require("class.phpmailer.php"); // укажите путь к файлу class.phpmailer.php
    $mail = new PHPMailer();
    $mail->IsSMTP();// отсылать используя SMTP
    $mail->Host = "mail.life-host.net"; // SMTP сервер
    $mail->SMTPAuth = true; // включить SMTP аутентификацию
    $mail->Username = "user@domain.com"; // пропишите Ваш почтовый адрес
    $mail->Password = "pass"; // введите пароль на указанный ящик
    $mail->From = "user@domain.com"; // укажите от кого письмо
    $mail->FromName = "Mailer"; // имя отправителя
    $mail->AddAddress("user@domain.com","Name"); // е-маил кому отправлять и на какое имя
    $mail->AddReplyTo("user@domain.com","Info"); // е-маил и имя на который пойдет ответ на Ваше письмо
    $mail->WordWrap = 50;// set word wrap
    $mail->IsHTML(true);// отправить в HTML формате


    $mail->Subject = "Here is the subject"; // тема письма
    $mail->Body = "This is the HTML body"; // тело письма в html формате

    $mail->AltBody = "This is the text-only body"; // тело письма текстовое

    if(!$mail->Send())
    {
    echo "Письмо не отправлено ";
    echo "Mailer Error: " . $mail->ErrorInfo;
    exit;
    }
    echo "Письмо отправлено";
    ?>

     
    vilk108 нравится это.
  5. slik_jay

    slik_jay ^_^

    Регистр.:
    24 май 2008
    Сообщения:
    50
    Симпатии:
    27
    VDS ? твой ? тогда
    # apt-get (yum) install sendmail :)
     
  6. despainer

    despainer

    Регистр.:
    15 фев 2008
    Сообщения:
    615
    Симпатии:
    168
    у него есть сендмайл тока не прописан он в php.ini
     
  7. ZloiJoker

    ZloiJoker Создатель

    Регистр.:
    2 июн 2007
    Сообщения:
    33
    Симпатии:
    0
    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"
     
  8. umaxim

    umaxim Создатель

    Регистр.:
    3 авг 2008
    Сообщения:
    11
    Симпатии:
    0
    Как я знаю не на всех vps есть поддержка писем.
     
  9. funman

    funman Постоялец

    Регистр.:
    28 дек 2007
    Сообщения:
    146
    Симпатии:
    25
    Как вариант можно через 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_INETSOCK_STREAMSOL_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($socketbase64_encode($login));
            
    read_smtp_answer($socket); // ответ сервера
            
            // Отравляем пароль
            
    write_smtp_response($socketbase64_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($socket1024);
            
            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$msgstrlen($msg));
        }
    ?>
     
Статус темы:
Закрыта.