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

 

Настройка в Joomla

Первое, что надо сделать, так это в Системе>> Общие настройки>> выбрать Сервер, а потом прописать в 

PHP mail function

По умолчанию в Joomla почта отправляется через PHP mail function. Для этого PHP mail function должна поддерживаться сервером.

Проверяем, поддерживается или нет, создаем файл, например, mail.php со следующим кодом:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<?php
mail(Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.' , 'subject' , 'hello');
?>
<body>
</body>
</html>

где Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. - адрес электронной почты, на которую вы хотите получить письмо.

Кидаем файл в любую директорию своего сайта, для чистоты эксперимента выставляем на него права 777 (или передаем его во владение пользователя, наделенного всеми правами - Апач или www-data или тому подобным).

Выходим на mail.php через браузер. Видим чистый лист, но смущать это не должно, озадачиваться будем, если, проверив указанный почтовый ящик, мы не обнаружим там письма с темой subject и содержанием hello. Если письмо пришло - PHP mail function работает. Если письмо не приходит - проверяем папку "спам", может оно там (на gmail папка спам по умолчанию скрыта), ну а если и там нет - PHP mail function на сервере нет или какие-то косяки с его настройкой.  Обращаемся к хостеру, если настроят - идем дальше, если нет возможности использовать PHP mail function на данном хостинге - меняем хостера используем альтернативные способы отправки почты (о них ниже).

Если ваш хостинг Masterhost, скорее всего sendmail или php mail на нем не работают, воспользуйтесь smtp.

Если письма попадают в спам, проверьте, чтобы электронный адрес владельца домена на сервере и почтовый адрес, указанный в configuration.php  joomla совпадали и были ни в коем случае не на mail.ru. К слову сказать, для VirtueMart, если ящик в "Установки почты" и в Информация о магазине в разделе "Контактная информация" не один и тот же, почта так же считается спамом.

Далее проверяем, отправляется ли почта через форму контактов joomla. Если нет, проверяем права на файлы /libraries/phpmailer/.  777 выставлять не стоит, лучше присвойте эти файлы пользователю с соответствующими правами. Должно работать.

Проверяем функцию "поделиться ссылкой" или "отправить ссылку по почте", то есть работу компонента com_mailto, частенько именно с ней возникают проблемы и мы видим "Письмо не может быть отправлено".

Уточняем права на папку /components/com_mailto.

Если не помогло, проверяем .htaccess , если вы вносили в него изменения. Нет ли там лишних директив перенаправления? Временно замените свой .htaccess на стандартный из установочного пакета joomla.

И наконец, проблема может быть в /components/com_mailto/controller.php, строка

define('MAILTO_TIMEOUT', 20);

устанавливает тайм-аут от открытия окна до отправки в 20 секунд, если кто-то заполнит форму раньше, увидит вместо отправки сообщение об ошибке. Уменьшите это значение, но не сильно, иначе придется бороться со спамом.

 Если видите "Письмо отправлено", когда оно на самом деле не отправлено, скорее всего неправильно настроена PHP mail function на сервере, обратитесь к хостеру.

Настройка SMTP

Если PHP mail function или sendmail настроить не удается, пользуемся SMTP. Настройка не займёт много времени. Заходим в Общие настройки -> Сервер и ставим там следующие значения в разделе "Установки почты":

Для ящика на mail.ru:

Способ отправки почты............................. SMTP server
Адрес отправителя................................. ящик@mail.ru
Имя отправителя................................... любое имя
Путь к Sendmail................................... /usr/sbin/sendmail (по умолчанию)
Использовать SMTP-авторизацию..................... Да
SMTP порт ....................................................25
SMTP логин........................................ ящик@mail.ru
SMTP пароль....................................... пароль от ящик@mail.ru
Адрес SMTP-сервера................................ smtp.mail.ru

Для Google:

Способ отправки почты............................. SMTP server
Адрес отправителя................................. ящик@gmail.com
Имя отправителя................................... любое имя
Путь к Sendmail................................... /usr/sbin/sendmail
Использовать SMTP-авторизацию..................... Да
SMTP порт ....................................................25
SMTP логин..........................................ящик@gmail.com
SMTP пароль....................................... пароль от ящик@gmail.com
Адрес SMTP-сервера................................ ssl://smtp.gmail.com:465

Неудобство лишь в том, что количество писем в сутки с почтовых серверов ограничено, на gmail вроде как не более 60, так что если функция отправки почты на вашем сайте будет использоваться слишком часто, для некоторых пользователей она окажется недоступной.

Ошибка PHPMAILER_FROM_FAILED на 1.5 Джумле лечится:

находим файл .../components/com_contact/controller.php, в исходном коде меняем:

$mail->setSender( array( $email, $name ))

на

$mail->setSender( array( $MailFrom, $FromName ))

Настройка Sendmail

Ничего по этому поводу написать пока не могу.