PHPMAILER_EXECUTE/usr/sbin/sendmail, Mailer Error: Could not execute: /usr/sbin/sendmail, notice Письмо не может быть отправлено - именно так могут заканчиваться попытки отправки E-Mail в Joomla 1.5 когда дядя хостер неправильно настроил sendmail, чмоды на доступ к нему или запретил его экзекуцию.
Если те же проблемы с отправкой электронных писем (E-Mail) через sendmail или SMTP в Joomla 1.5, то первым делом посмотрите в информации про PHP полный путь к sendmail и если в общей конфигурации он прописан верно, то в той же информации про PHP смотрите значения директивы с именем disable_functions и если оно равно = exec, system, shell_exec, passthru, popen, dl, set_time_limit, max_execution_time, ini_restore, mail, то попытки отправки электронных писем (E-Mail) именно через sendmail будут накрываться медным тазом ибо экзекуция (выполнение) sendmail происходит посредством функции popen!
Единственный выход - это пробовать отправлять почту через SMTP сервер и с общими настройками Joomla для отправки электронных писем (E-Mail) через SMTPя думаю проблем не должно возникнуть, одно единственное, что следует упомянуть, так это то, что при использовании "Отправить эту ссылку по почте" в поле Ваш E-Mail:
пользователь должен указать как раз не свой, а наш E-Mail под учётной записью которого отправляется электронная почта (E-Mail) через SMTP потому, что SMTP сервер требует совпадения имени отправителя (Ваш E-Mail, From) с именем учетной записи под которой идёт подключение к SMTPсерверу: sender address must match authenticated user SMTP.
SMTP -> FROM SERVER: 220 smtp21.mail.ru ESMTP ready SMTP -> FROM SERVER: 250-smtp21.mail.ru 250-SIZE 73400320 250-8BITMIME 250-AUTH PLAIN LOGIN 250 STARTTLS SMTP -> FROM SERVER: 250 OK SMTP -> FROM SERVER: 501 sender address must match authenticated user SMTP -> ERROR: RCPT not accepted from server: 501 sender address must match authenticated user SMTP -> FROM SERVER: 503 sender not yet given SMTP -> ERROR: RSET failed: 503 sender not yet given Mailer Error: SMTP Error: The following SMTP Error: Data not [email protected]
Для того чтобы посетители сайта могли использовать возможность "Отправить эту ссылку по почте" в условиях настройки Joomla для отправки электронной почты (E-Mail) через SMTP, то мы должны сделать соответствующее объявление на своём сайте, в котором опубликовать наш E-Mail от имени которого происходит подключение к SMTP серверуи тогда функция "Отправить эту ссылку по почте" должна будет заработать!
Отправить эту ссылку по почте
E-mail адресата: [email protected]
Ваше имя: Vasya
Ваш E-Mail: [email protected]
Тема: Ku-Ku!
SMTP -> FROM SERVER: 220 smtp9.mail.ru ESMTP ready SMTP -> FROM SERVER: 250-smtp9.mail.ru 250-SIZE 73400320 250-8BITMIME 250-AUTH PLAIN LOGIN 250 STARTTLS SMTP -> FROM SERVER: 250 OK SMTP -> FROM SERVER: 250 Accepted SMTP -> FROM SERVER: 354 Enter message, ending with "." on a line by itself SMTP -> FROM SERVER: 250 OK id=1Sz8ZZ-0002IH-Jq SMTP -> FROM SERVER: 221 smtp9.mail.ru closing connection Message sent!
В Joomla 1.5 для отправки писем используется библиотека PHPMailer v2.0.4 for PHP4, расположенная по адресу /libraries/phpmailer/phpmailer.php и если общие настройки в Joomla сделаны верно, а почта не уходит и нельза определить ошибку, то используйте приведённые ниже куски кода для тестирования PHPMailer.
Пример использования PHPMailer для отправки через sendmail:
<?php require_once('./libraries/phpmailer/phpmailer.php'); $mail = new PHPMailer(); // defaults to using php "mail()" $mail->IsSendmail(); // telling the class to use SendMail transport $mail->Sendmail = '/usr/sbin/sendmail'; // Set full path to sendmail //$body = file_get_contents('contents.html'); $body = 'body'; //$body = eregi_replace("[\]",'',$body); $mail->AddReplyTo("[email protected]","First Last"); //$mail->SetFrom('[email protected]', 'First Last'); $mail->From = '[email protected]'; $mail->AddReplyTo("[email protected]","First Last"); $address = "[email protected]"; $mail->AddAddress($address, "John Doe"); $mail->Subject = "PHPMailer Test Subject via Sendmail, basic"; // optional, comment out and test $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; $mail->MsgHTML($body); //$mail->AddAttachment("images/phpmailer.gif"); // attachment //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; }
Пример использования PHPMailer для отправки через SMTP сервер:
<?php # http://phpmailer.worxware.com/index.php?pg=examples require_once('./libraries/phpmailer/phpmailer.php'); $mail = new PHPMailer(); // defaults to using php "mail()" $mail->IsSMTP(); // telling the class to use SMTP //$body = file_get_contents('contents.html'); $body = 'body'; //$body = eregi_replace("[\]",'',$body); $mail->SMTPDebug = 2; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->Host = "smtp.mail.ru"; // SMTP server $mail->Port = 25; // set the SMTP port for the GMAIL $mail->Username = "[email protected]"; // SMTP account username $mail->Password = "mainpass"; // SMTP account password $mail->AddReplyTo("[email protected]","First Last"); //$mail->SetFrom('[email protected]', 'First Last'); $mail->From = '[email protected]'; $mail->AddReplyTo("[email protected]","First Last"); $address = "[email protected]"; $mail->AddAddress($address, "John Doe"); $mail->Subject = "PHPMailer Test Subject via Sendmail, basic"; // optional, comment out and test $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; $mail->MsgHTML($body); //$mail->AddAttachment("images/phpmailer.gif"); // attachment //$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment if(!$mail->Send()) { echo "Mailer Error: " . $mail->ErrorInfo; } else { echo "Message sent!"; }
В некоторых случаях, настройки некоторых модулей могут некорректно работать с SMTP настройками и выдавать PHPMAILER_RECIPIENTS_FAILED, это происходит из-за несоответствия SMTP логина с именем отправителя, по идее должен помочь следующий рецепт: открываем components/com_contact/controller.php, находим строку 194 и меняем:
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Письмо не может быть отправлено из-за кривого com_mailto
Кнопка E-mail (отправить ссылку другу) служит для отправки другу или недругу ссылки на какой-то материал. Письмо не может быть отправлено через эту кнопку из-за кривого /components/com_mailto/controller.php, в котором не верно рассчитывается таймаут и проверка "Verify that this is a local link". Открываем /components/com_mailto/controller.php, находим строки:
// we return time() instead of 0 (as it previously was), ... if($timeout == 0 || time() - $timeout < MAILTO_TIMEOUT) { JError::raiseNotice( 500, JText:: _ ('EMAIL_NOT_SENT')); return $this->mailto(); } //...... // Verify that this is a local link if((!$link) || (!JURI::isInternal($link))) { //Non-local url... JError::raiseNotice( 500, JText:: _ ('EMAIL_NOT_SENT' )); return $this->mailto(); }
И меняем их до такой кондиции:
Только после полного отключения блокировщика скриптов и рекламы на этом месте появится полезная подсказка/ссылка/код/пример конфигурации/etc!
Также будет полезно увеличить значение константы MAILTO_TIMEOUT с 20 до 50! Эта бага упоминалась на: