Modx не отправляет письма на почту

Добрый день!

Не давно я писал о своей проблеме с файловым менеджером. Теперь обнаружил ещё одну.

Если коротко, то есть VPS, настроенный по статье Василия. На нём есть несколько сайтов на Modx Revo. Недавно я обнаружил, что не один из сайтов не отправляет письма на почту: форма заказа minishop, другие формы formit, а так же при обновлении пароля пользователя и отправке его на почту (в админке modx) письма тоже не приходят.

Подскажите, пожалуйста, в чём может быть дело? Возможно, это тоже связано с правами на сервере?
Kyrychyk Roman
10 января 2013, 12:14
modx.pro
19 599
0

Комментарии: 17

Andrei Kilin
10 января 2013, 16:29
0
Настраивать на сервере отправку почты (sendmail для php) или делать отправку из MODx с помощью smtp — в настройках системы подраздел Почта у раздела core. Второе легче сделать.
    Василий Наумкин
    10 января 2013, 16:40
    1
    0
    Нужно просто поставить почтовый сервер:
    sudo apt-get install sendmail

    Обслуживание входящей почты советую отдать Яндексу.

    Если будут проблемы с отправкой почты на тот же домен, по которому отзывается сервер (sendmail будет думать, что он должен доставить почту сам себе и не отправит её на Яндекс) — вот тут лечение.
      Kyrychyk Roman
      10 января 2013, 16:56
      0
      Спасибо, попробую
        Andrei Kilin
        10 января 2013, 17:18
        0
        Еще, вроде как, надо пристать к хостеру, чтобы он прописал PTR запись, иначе почта может попадать в спам или вовсе не доходить.
        Kyrychyk Roman
        19 января 2013, 02:09
        0
        Поставил почтовый сервер, пока что без делегации домена Яндексу.

        При отправке через Formit, браузер долго думает, а потом получаю: 504 Gateway Time-out nginx/1.2.3. При отправке пароля юзеру из админки, тоже долго думает, но всё же отправляет.

        В какую сторону копать?
          Василий Наумкин
          19 января 2013, 07:37
          0
          Почитай про настройку sendmail на хостинге?

          Когда долго думает — проблема в разрешении имён, он обычно говорит об этом при установке и перезапуске.
          Пропиши в /etc/hosts ip сервера и его доменное имя.

          Например, у меня так:
          151.236.219.215 bezumkin bezumkin.ru
            Kyrychyk Roman
            19 января 2013, 19:39
            0
            Подредактировал /etc/hosts. После этого Modx стал нормально отправлять письма из админки, но сайты так и не отправляют. Уже всё про настройку Sendmail перегуглил. Вроде всё правильно прописал, но так и не полечатся решить…

            В логах Sendmail при попытке отправить письмо через Formit выдаёт следующее:

            /var/log/syslog-Jan 19 16:22:44 vm10921 sendmail[31526]: r0JCMiBd031526: Authentication-Warning: heis.pro: heis set sender to http://art-vision.heis.pro/ using -f
            /var/log/syslog-Jan 19 16:22:45 vm10921 sendmail[31526]: r0JCMiBd031526: from=http://art-vision.heis.pro/, size=1252, class=0, nrcpts=1, msgid=<7ebc9e0695094df1eb9e190a38778ee3@heis.pro>, relay=heis
            @localhost
            /var/log/syslog-Jan 19 16:22:45 vm10921 sendmail[31526]: r0JCMiBd031526: to=webmaker27@gmail.com, delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=31252, relay=[127.0.0.1] [127.0.0.1], dsn=5.6.0,

            stat=Data format error
      Денис А.
      26 ноября 2013, 11:15
      0
      Здравствуйте!
      Помогите пожалуйста, есть VPS на нем несколько сайтов (вирт. хостов), к каждому подключен pdd.yandex, в данный момент почта отправляется только с одного сайта подключенному к нему pdd.yandex.
      Голову сломал, как можно настроить, чтобы с каждого сайта почта отправлялась к подключенному ему pdd.yandex?
      Увидел статью о modMail, я ведь правильно понимаю, для его использования все равно должен быть настроен почтовый сервер?
      Заранее большое спасибо!
        Василий Наумкин
        26 ноября 2013, 12:30
        0
        Настрой каждому сайту отправку через smtp, почтовый сервер тут не нужен.
          Денис А.
          26 ноября 2013, 12:41
          0
          Большое спасибо! Это из настроек системы, отсортировав по «Почта»?
            Yana V
            26 ноября 2013, 13:03
            0
            Дайте человеку в отпуске отдохнуть =)
              Денис А.
              26 ноября 2013, 13:18
              0
              Ой, извиняюсь, видел же заметку ))
              Василий Наумкин
              26 ноября 2013, 13:29
              0
              Да, конечно, где же еще?
                Денис А.
                26 ноября 2013, 16:14
                0
                Круто, все получилось, спасибо!!! ))
                Не мог понять почему выдавало ошибку:
                Произошла ошибка при попытке отправить почту. The following From address failed: ...
                Исправил адрес почты не в профиле пользователя, а в настройках системы: emailsender
                На такой же от имени которого отправляет Formit, и все получилось ))
          Alexey
          01 октября 2015, 07:20
          0
          Добрый день!

          Столкнулся с проблемой: есть сайт на modx revo, есть форма обратной связи с вложением, письмо отправляется, вложение — нет! Отправка происходит с помощью обычного php файла в корне сайта, не через классы… пробовал отправлять с другого сайта modx revo — все прекрасно отправляется, включая вложение!

          Отсюда сделал вывод, что необходимо подправить какие-то системные настройки сайта… или дело в настройках хостинга? Оба сайта лежат на бегете, только учетки разные, к хостингу проблемного сайта пока доступа нет, к сожалению — только админка…

          ПОдскажите, пожалуйста, возможно ли настроить отправку вложений через админку сайта, не применяя классы?

          Заранее спасибо!
            Alexey
            01 октября 2015, 21:10
            0
            Интересные дела получаются!

            Я вставляю в шаблон форму обратной связи, заполняю поля, отправляю… вот код формы:

            <form enctype="multipart/form-data" method="post" action="contact.php" name="contactform" id="contactform">               
                            <div class="one_half element_from_left">            
                                <input name="name" type="text" id="name" size="30" placeholder="Имя">
                                <input name="email" type="text" id="email" size="30" placeholder="Почта">                
                                <input name="phone" type="text" id="phone" size="30" placeholder="Телефон">
            					<input type="file" name="filet" accept="*/*" id="file_send">
                            </div>                
                            <div class="one_half last element_from_right">            
                                <textarea name="comments" cols="40" rows="4" id="comments" placeholder="Сообщение"></textarea>            
                            </div>                            
                            <input type="submit" class="send_message" id="submit" value="Отправить сообщение" />
                            </form>
            Форма отсылается на отдельный файлик, расположеный в корне сайта, вот его код:

            <?php
            
            if(!$_POST) exit;
            
            // Email address verification, do not edit.
            function isEmail($email) {
            	return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
            }
            
            if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
            
            $name     = $_POST['name'];
            $email    = $_POST['email'];
            //$email    = 'mail@вывески-омск.рф';
            $phone   = $_POST['phone'];
            $comments = $_POST['comments'];
            
            
            if(trim($name) == '') {
            	echo '<div class="error_message">Внимание! Введите своё имя</div>';
            	exit();
            } else if(trim($email) == '') {
            	echo '<div class="error_message">Внимание! Введите свою почту</div>';
            	exit();
            } else if(trim($phone) == '') {
            	echo '<div class="error_message">Внимание! Введите свой телефон</div>';
            	exit();
            } else if(!is_numeric($phone)) {
            	echo '<div class="error_message">Внимание! Телефон может содержать только цифры.</div>';
            	exit();
            } else if(!isEmail($email)) {
            	echo '<div class="error_message">Внимание! Вы ввели неверный адрес электронной почты, попробуйте еще раз</div>';
            	exit();
            } else if(trim($comments) == '') {
            	echo '<div class="error_message">Внимание! Пожалуйста, введите ваше сообщение.</div>';
            	exit();
            } 
            
            if(get_magic_quotes_gpc()) {
            	$comments = stripslashes($comments);
            }
            
            
            // Configuration option.
            // Enter the email address that you want to emails to be sent to.
            // Example $address = "joe.doe@yourdomain.com";
            
            
            
            //$address = "example@themeforest.net";
            $address = "mail@yandex.ru";
            
            
            // Configuration option.
            // i.e. The standard subject will appear as, "You've been contacted by John Doe."
            
            // Example, $e_subject = '$name . ' has contacted you via Your Website.';
            
            $e_subject = 'Вы получили письмо от ' . $name . '.';
            
            
            // Configuration option.
            // You can change this if you feel that you need to.
            // Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.
            
            $e_body = "Имя: $name" . PHP_EOL . PHP_EOL;
            $e_reply = "Почта: $email\r\nТелефон: $phone\r\n";
            $e_content = "\r\nСообщение: $comments" . PHP_EOL . PHP_EOL;
            
            
            $msg = $e_body . $e_reply . $e_content;
            
            $headers = "From: $email" . PHP_EOL;
            $headers .= "Reply-To: $email" . PHP_EOL;
            //$headers .= "MIME-Version: 1.0" . PHP_EOL;
            //$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n"; 
            //$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
            //$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
            
            //if (isset($_FILES["filet"]["tmp_name"])) {
            
            $attachment = chunk_split(base64_encode(file_get_contents($_FILES["filet"]["tmp_name"])));
            $filename = $_FILES["filet"]["name"];
            $filetype = $_FILES["filet"]["type"];
            
            $boundary = md5(date("r", time()));
            
            $headers .= "MIME-Version: 1.0\r\n";
            $headers .= "Content-Type: multipart/mixed; boundary=\"_1_$boundary\"";
            $msg="
            --_1_$boundary
            Content-Type: multipart/alternative; boundary=\"_2_$boundary\"
            --_2_$boundary
            Content-Type: text/plain; charset=\"utf-8\"
            Content-Transfer-Encoding: 7bit
            $msg
            --_2_$boundary--
            --_1_$boundary
            Content-Type: \"$filetype\"; name=\"$filename\"
            Content-Transfer-Encoding: base64
            Content-Disposition: attachment
            $attachment
            --_1_$boundary--";
            //}
            
            if(mail($address, $e_subject, $msg, $headers)) {
            	// Email has sent successfully, echo a success page.
            	echo "<fieldset>";
            	echo "<div id='success_page'>";
            	echo "<h1>Ваше письмо успешно отправлено.</h1>";
            	echo "<p>Спасибо <strong>$name</strong>, Мы ответим вам в ближайшее время</p>";
                echo "<pre>";
                   print_r($_FILES["filet"]);
                echo "</pre>";
            	echo "</div>";
            	echo "</fieldset>";
            } else {
            	echo 'Ошибка отправки почты!';
            }
            Письмо благополучно уходит, но на ящик приходит всё, кроме вложения!

            ОДНАКО:

            если я создаю отдельный файл в корне сайта, копирую в него всю форму, отправляю с неё письмо с вложением, то письмо приходит нормально, с вложением…

            Отсюда делаю вывод, что дело в самом ModX… господа, можете посоветовать, в какую сторону нужно рыть??? Я пересмотрел все настройки системы, результат — ноль!

            Уже моСк кипит…
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              17