Ошибка could not instantiate mail function что это

В этой статье мы рассмотрим проблемы, возникающие с отправкой почты на CMS Joomla.

Наиболее часто встречаются ошибки вида «Could not instantiate mail function.» и «Не удалось вызвать функцию mail», также бывают случаи, когда никакой ошибки не отображается, тем не менее письма не приходят на почту. На всех этих случаях мы остановимся подробнее далее, если у вас возникают проблемы с отправкой почты по протоколу SMTP, то вам будет полезна эта статья.

Ошибки, описанные выше, могут быть вызваны рядом причин. В этой статье я попытался систематизировать информацию по проблемам с отправкой писем на Joomla и их решениям.

1. Вы настраиваете модуль обратный связи, отправку почты и тп на локальном сервере.

На локальных серверах вроде Denver или WAMP по умолчанию стоят заглушки, которые препятствуют отправке писем. Как правило, после переноса сайта на хостинг эти проблемы пропадут.

2. Вы получаете письма на yandex или mail почту.

Эти почтовые службы с большим подозрением относятся к получаемым сообщениям. Если, например, ваш сайт висит на одном IP c рассыльщиками спама, велика вероятность, что и вы попадете в список подозрительных отправителей и будете получать сообщения в папку спам либо с большой задержкой либо сообщения в принципе не будут доходить. Как можно решить эту проблему? Ниже мои советы от простого к сложному.

2а. Если письмо нашлось в спаме, просто добавьте адрес с которого оно пришло в адресную книгу, после этого письма начнут приходить в основные папки.

2б. Настройте отправку через SMTP. Это можно сделать буквально за 5 минут, инструкцию можно найти здесь. На мой взгляд самый простой и надежный способ.

2в. Если отправка через SMTP вам не подходит, можно попробовать создать ящик на вашем хостинге, он будет выглядеть примерно так название_ящика@ваш_домен.ru и добавить его в поле email-сайта на вкладке сервер. Почтовый сервер будет видеть в исходящих почту с вашим доменом и траст письма повысится. Сделать это можно в панели администратора, «System->Global configuration» («Система->Общие настройки»). В этом разделе открыть вкладку Server (Сервер) и в правом нижнем углу найти настройки отправления почты.

options

2г. Настройте spf. Spf это верификация вашего домена, настраивается на хостинге за пару минут при наличие инструкции. Так как я не знаю ваш хостинг, то инструкцию вам придется найти самостоятельно, обычно достаточно набрать в поиске что-то вроде «spf beget» (бегет это мой хостинг) и открыть первую ссылку. Перед гуглением можно попробовать посмотреть здесь, там размещены настройки для кучи популярных хостингов.

2д. Настроить DKIM. DKIM это цифровая подпись, настраивается тоже по инструкции хостинга, но в отличие от spf услуга может быть платной. Перед приобретением рекомендую вам связаться со своим хостером и уточнить возможные причины не прихода писем.

3. Проблемы с PHP Mailer.

Довольно распространенный случай. В Joomla предусмотрено 3 механизма отправки писем: PHP Mail, Sendmail и SMTP. По-умолчанию используется первый и с ним зачастую бывают проблемы. Ниже я предлагаю несколько путей решения проблемы.

2a. Самый простой способ решить проблему, это изменить способ отправки на Sendmail. Для этого в панели администратора надо перейти в «System->Global configuration» («Система->Общие настройки»), где открыть вкладку Server (Сервер). Справа внизу вы увидите настройки почты, в поле «Mailer» («Способ отправки») в выпадающем списке надо выбрать «Sendmail». Можно также поменять способ отправки на SMTP, как это сделать читайте здесь.

Joomla не отправляются письма

3б. Также можно попробовать починить PHP Mailer вручную . Для этого надо найти и открыть файл:»корень сайта/libraries/phpmailer/phpmailer.php» или «корень сайта/libraries/vendor/phpmailer/phpmailer/class.phpmailer.php» для поздних версий джумлы. Далее найти строчку:

$params = sprintf(‘-oi -f %s’, $this->Sender);

Вероятный номер строки 707 или 1161. И дописать под ней:

$params = ‘ ‘;

Ваш код теперь выглядит так:

if (empty($this->Sender)) {

$params = ‘-oi -f %s’;

} else {

$params = sprintf(‘-oi -f %s’, $this->Sender);

$params = ‘ ‘;

}

Или в случае более поздней версии заменить искомую строку:

Код:
$params = sprintf(‘-f%s’, $this->Sender);

Меняется на:
$params = sprintf(‘-f%s’);

4. Проблемы с хостингом.

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

I’m using the mail() basic example modified slightly for my user id and I’m getting the error «Mailer Error: Could not instantiate mail function»

if I use the mail function —

mail($to, $subject, $message, $headers);

it works fine, though I’m having trouble sending HTML, which is why I’m trying PHPMailer.

this is the code:

<?php
require_once('../class.phpmailer.php');

    $mail             = new PHPMailer(); // defaults to using php "mail()"
    $body             = file_get_contents('contents.html');
    $body             = eregi_replace("[]",'',$body);
        print ($body ); // to verify that I got the html
    $mail->AddReplyTo("reply@example.com","my name");
    $mail->SetFrom('from@example.com', 'my name');
    $address = "to@example.com";
    $mail->AddAddress($address, "her name");
    $mail->Subject    = "PHPMailer Test Subject via mail(), basic";
    $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!";
    }
?>

Stephen Ostermiller on Strike's user avatar

asked Aug 18, 2009 at 23:20

sdfor's user avatar

3

Try using SMTP to send email:-

$mail->IsSMTP();
$mail->Host = "smtp.example.com";

// optional
// used only when SMTP requires authentication  
$mail->SMTPAuth = true;
$mail->Username = 'smtp_username';
$mail->Password = 'smtp_password';

answered Aug 22, 2011 at 8:55

Mukesh Chapagain's user avatar

Mukesh ChapagainMukesh Chapagain

24.9k15 gold badges118 silver badges119 bronze badges

4

Your code looks good, did you forget to install PostFix on your server?

sudo apt-get install postfix

It worked for me ;)

Cheers

Andrew's user avatar

Andrew

18.3k12 gold badges103 silver badges117 bronze badges

answered Feb 6, 2018 at 13:22

Irwuin's user avatar

IrwuinIrwuin

5033 silver badges9 bronze badges

2

This worked for me

$mail->SetFrom("from@domain.co","my name", 0); //notice the third parameter

answered Feb 27, 2016 at 20:52

Matías Cánepa's user avatar

Matías CánepaMatías Cánepa

5,6834 gold badges57 silver badges96 bronze badges

2

$mail->AddAddress($address, "her name");

should be changed to

$mail->AddAddress($address);

This worked for my case..

answered Aug 31, 2011 at 12:09

Avinash's user avatar

AvinashAvinash

6,02415 gold badges60 silver badges95 bronze badges

5

You need to make sure that your from address is a valid email account setup on that server.

answered Jun 19, 2010 at 7:31

D.F.'s user avatar

D.F.D.F.

1851 silver badge6 bronze badges

0

If you are sending file attachments and your code works for small attachments but fails for large attachments:

If you get the error «Could not instantiate mail function» error when you try to send large emails and your PHP error log contains the message «Cannot send message: Too big» then your mail transfer agent (sendmail, postfix, exim, etc) is refusing to deliver these emails.

The solution is to configure the MTA to allow larger attachments. But this is not always possible. The alternate solution is to use SMTP. You will need access to a SMTP server (and login credentials if your SMTP server requires authentication):

$mail             = new PHPMailer();
$mail->IsSMTP();                           // telling the class to use SMTP
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Host       = "mail.example.com";    // set the SMTP server
$mail->Port       = 26;                    // set the SMTP port
$mail->Username   = "johndoe@example.com"; // SMTP account username
$mail->Password   = "********";            // SMTP account password

PHPMailer defaults to using PHP mail() function which uses settings from php.ini which normally defaults to use sendmail (or something similar). In the above example we override the default behavior.

answered Aug 26, 2015 at 21:15

Salman A's user avatar

Salman ASalman A

260k82 gold badges429 silver badges521 bronze badges

The PHPMailer help docs on this specific error helped to get me on the right path.

What we found is that php.ini did not have the sendmail_path defined, so I added that with sendmail_path = /usr/sbin/sendmail -t -i;

answered May 4, 2017 at 1:24

Matt Pope's user avatar

Matt PopeMatt Pope

1672 silver badges11 bronze badges

1

In my case, it was the attachment size limit that causes the issue. Check and increase the size limit of mail worked for me.

answered Oct 31, 2018 at 17:59

fiskcn's user avatar

1

Seems in my case it was just SERVER REJECTION. Please check your mail server log / smtp connection accessibility.

answered Nov 10, 2016 at 10:32

Alex's user avatar

AlexAlex

1,2971 gold badge16 silver badges12 bronze badges

I had this issue, and after doing some debugging, and searching I realized that the SERVER (Godaddy) can have issues.

I recommend you contact your Web hosting Provider and talk to them about Quota Restrictions on the mail function (They do this to prevent people doing spam bots or mass emailing (spam) ).

They may be able to advise you of their limits, and if you’re exceeding them. You can also possibly upgrade limit by going to private server.

After talking with GoDaddy for 15 minutes the tech support was able to resolve this within 20 minutes.

This helped me out a lot, and I wanted to share it so if someone else comes across this they can try this method if all fails, or before they try anything else.

answered Jan 21, 2017 at 7:47

levi's user avatar

levilevi

1,5563 gold badges20 silver badges37 bronze badges

An old thread, but it may help someone like me. I resolved the issue by setting up SMTP server value to a legitimate value in PHP.ini

answered Jun 6, 2013 at 0:38

Atif.SQL's user avatar

I had this issue as well. My solution was to disable selinux. I tried allowing 2 different http settings in selinux (something like httpd_allow_email and http_can_connect) and that didn’t work, so I just disabled it completely and it started working.

answered Dec 30, 2014 at 19:53

iAndy's user avatar

iAndyiAndy

113 bronze badges

I was having this issue while sending files with regional characters in their names like: VęryRęgióńął file - name.pdf.

The solution was to clear filename before attaching it to the email.

answered Aug 20, 2016 at 19:20

jmarceli's user avatar

jmarcelijmarceli

19k6 gold badges69 silver badges67 bronze badges

Check if sendmail is enabled, mostly if your server is provided by another company.

answered Oct 5, 2017 at 13:43

Gianluca Demarinis's user avatar

For what it’s worth I had this issue and had to go into cPanel where I saw the error message

«Attention! Please register your email IDs used in non-smtp mails through cpanel plugin. Unregistered email IDs will not be allowed in non-smtp emails sent through scripts. Go to Mail section and find «Registered Mail IDs» plugin in paper_lantern theme.»

Registering the emails in cPanel (Register Mail IDs) and waiting 10 mins got mine to work.

Hope that helps someone.

answered Jun 21, 2018 at 10:19

MomasVII's user avatar

MomasVIIMomasVII

4,5214 gold badges33 silver badges49 bronze badges

A lot of people often overlook the best/right way to call phpmailer and to put these:

require_once('../class.phpmailer.php');

or, something like this from the composer installation:

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require_once "../../vendor/autoload.php";

on TOP of the page before calling or including anything else. That causes the «Could not instantiate mail function»-error by most folks.

Best solution: put all mail handling in a different file to have it as clean as possible. And always use SMTP.
If that is not working, check your DNS if your allowed to send mail.

answered Dec 24, 2021 at 22:20

KJS's user avatar

KJSKJS

1,1761 gold badge13 silver badges29 bronze badges

My config: IIS + php7.4

I had the same issue as @Salman-A, where small attachments were emailed but large were causing the page to error out.
I have increased file and attachments limits in php.ini, but this has made no difference.

Then I found a configuration in IIS(6.0), and increased file limits in there.
iis config image

Also here is my mail.php:

use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
require '../_PHPMailer-master/src/Exception.php';
require '../_PHPMailer-master/src/PHPMailer.php';

try{
    $email = new PHPMailer(true);
    $email->SetFrom('internal@example.com', 'optional name');
    $email->isHTML(true);
    $email->Subject   = 'my subject';
    $email->Body      = $emailContent;
    $email->AddAddress( $eml_to );
    $email->AddAttachment( $file_to_attach );
    $email->Send();
  }catch(phpmailerException $e){echo $e->errorMessage();}

future.

Stephen Ostermiller on Strike's user avatar

answered Sep 8, 2020 at 14:39

michal's user avatar

michalmichal

3274 silver badges15 bronze badges

We nee to change the values of ‘SMTP’ in php.ini file
php.ini file is located into

EasyPHP-DevServer-14.1VC11binariesphpphp_runningversionphp.ini

answered Oct 24, 2014 at 5:48

user3595601's user avatar

Joomla — хороший движок, но не идеальный. Даже на таком удобном конструкторе могут выскакивать весьма неудобные проблемы. К примеру, в CMS Joomla выскакивает белый экран при входе в админку. Либо возникают ошибки в результате активации человекопонятных ссылок в настройках.

Но одна из самых распространенных и непонятных для многих вебмастеров ошибка — это «сould not instantiate mail function».

Такое случается, когда вам не удалось вызвать функцию отправления электронного письма при помощи движка Joomla. Рассмотрим возможные причины возникновения ошибки и методы ее решения.

135

Почему не удалось вызвать функцию отправки на имейл в Joomla

Итак, попробуем определить причину появления навязчивого сообщения «сould not instantiate mail function» и почему не удалось вызвать функцию в разных ситуациях.

Первая причина, почему выскочила надпись «сould not instantiate mail function» при попытки отправить письмо на имейл — это ваш хостинг, а точнее ваш локальный сервер. Часто вебмастера перед тем, как что-то устанавливать на сайт или перед его публикацией, проводят эксперименты вдали от сети Интернет — у себя на компьютере на созданном виртуальном сервере. Если вы сейчас редактируете содержимое сайта именно при помощи локального сервера, то функцию не удалось вызвать по очень простой причине — у вас на компьютере нет куда отправлять имейл. То есть у вас нет сервера для отправки электронных писем. И неважно какой именно локальный хост вы используете, WAMP или Денвер — вы все равно не сможете отправлять с него электронные письма.

Порой надпись «сould not instantiate mail function» появляется, но не при каждом отправлении письма. К примеру, когда вы делаете рассылки своим подписчикам и из тысячи человек 20 не получают письма, так как не удалось вызвать эту функцию в Joomla. В таком случае объяснение простое — они ввели неправильный адрес электронной почты, когда подписывались на вашу рассылку. Решить такую проблему невозможно — придется удалить невнимательных подписчиков.

joomla-3.0-smtp-mail-settings

Иногда Joomla выдает надпись «сould not instantiate mail function» из-за того, что вы ввели в данных отправки какие-то специальные символы, которые сервер не воспринимает. Особенно часто эту случается в тех случаях, когда вы создаете скрипт рассылки и указываете в нем имя пользователя с какими-то особыми знаками. Если это так, то чтобы удалось вызвать функцию отправки электронного письма в Joomla, вам необходимо нажать пункт Yes возле графы Adds Names, чтобы сервис добавлял имена в письма и воспринимал специальные символы.

Еще одна причина, по которой вместо отчета об отправке сообщений вы увидите «сould not instantiate mail function» — это недействительный донорский адрес имейл. Дело в том, что даже если сообщения отправляет ваш сервер, они не придут получателю, если не будет указан отправитель. Возможно, вы указали неверный имейл отправителя, ведь эта почта должна быть зарегистрирована на вашем доменном имени.

Если все перечисленные причины не подходят для вашего случая, то попытайтесь разведать обстановку у хостинг-провайдера. Очень часто на хостинге ставят ограничения для различных услуг. Таким образом они завлекают клиентов покупать пакеты подороже. Есть вероятность, что не удалось вызвать функцию отправки сообщений в Joomla как раз из-за подобных ограничений. В частности, хостинг-провайдер мог поставить максимальный предел количества отправленных сообщений за час. Если это так, то вам остается немного подождать, чтобы отправить очередную партию электронных писем, либо приобрести пакет подороже, чтобы снять установленное ограничение.

Существуют и другие причины, из-за чего вылетает сообщение «сould not instantiate mail function» на сайте с движком Joomla. И вполне вероятно, что причины эти снова кроются в ограничениях вашего хостинга. Вам стоит заранее разведать допустимые параметры электронных сообщений для отправки, чтобы потом не возникало проблем. К примеру, некоторые хостинги априори отказывают отправлять сообщения, если в них закреплены какие-то файлы. Возможно, таким образом они пытаются избежать прецедентов спам-рассылок, а с другой стороны — не хотят отправлять слишком большие массивы информации, нагружая тем самым сервера. В любом случае вам нужно разведать обстановку в технической службе поддержки, а потом искать пути решения.

server-settings-image

И последняя причина, по которой надпись «сould not instantiate mail function» не дает вам отправить электронные письма — это ошибки в поле «Тема» при отправке. Вы должны знать, какие лимиты длины «Темы» установлены на сервере. Превышение лимита — это однозначный отказ к отправке. Да и не стоит делать рассылку с громоздкими заголовками — это не эффективно. С другой стороны, вы могли использовать в пункте «Тема» какие-то запрещенные символы. В любом случае вам поможет поддержка!

Из этого туториала Вы узнаете, как устранить ошибку «Could not instantiate mail function» в Joomla.

Это одна из наиболее распространённых ошибок, которая показывает, что с отправкой электронных сообщений на вашем сайте Joomla есть определённые проблемы. Вероятнее всего, эта ошибка возникла потому, что ваш сервер сайта Joomla не поддерживает php-функцию mail(), а Joomla пытается послать электронное сообщение. Сообщение об ошибке не указывает на её причину. Есть несколько способов устранить данную ошибку. Выбор метода зависит от использованного сервера – локальный сервер или удалённый. Давайте ознакомимся со способами устранения данной ошибки.

Локальный сервер

Для установки Joomla Вы можете использовать WAMP, XAMP, MAMP или любой другой локальный сервер. Если шаблон установлен на один из этих локальных серверов, электронные письма не будут отправляться, так как у локальных серверов нет сервера электронной почты. В этом случае Вам нужно настроить AcyMailing вручную для использования внешнего сервера SMTP. Однако, в этом случае отправка электронных писем может не работать после загрузки сайта на удалённый сервер.

Удалённый сервер

Если Joomla установлена на удалённый сервер, Вы иногда можете увидеть ошибку ‘Could not instantiate mail function’ при отправке электронного сообщения. Во-первых, убедитесь, что настройки SMPT введены правильно. Перейдите на вкладку Сайт -> Общие настройки -> Сервер -> Настройки электронной почты (Site -> Global Configuration -> Server -> Mail Settings). На этой вкладке должны быть заполнены все поля:

Joomla_3_How_to_fix_Could_not_instantiate_mail_function_error_in_contact_form_1

Есть несколько причин, по которым может возникать эта ошибка:

  1. Неправильные настройки AcyMailing. Убедитесь, что Вы ввели правильные данные во вкладке Компоненты -> AcyMailing -> Настройка -> Настройка электронной почты (Components -> AcyMailing -> Configuration -> Mail Configuration) в админ панели Joomla.

  2. Неверно введен электронный адрес получателя писем. В этом случае, ошибка ‘Could not instantiate mail function’ возникнет лишь для некоторых пользователей. Это обозначает то, что электронное письмо не может быть доставлено на введённый адрес электронной почты. Пользователь должен проверить введённый электронный адрес .

  3. Специальные символы в поле «Тема». Некоторые серверы не могут доставить электронное письмо, если оно содержит специальные символы в поле ‘Тема’. Убедитесь, что такие символы не используются. В качестве альтернативы, обратитесь к вашему хостинг-провайдеру для получения дальнейшей информации и инструкций по устранению проблемы.

  4. Слишком много текста в поле «Тема». Вы не сможете отправить электронное сообщение, если Вы ввели слишком много текста в поле «Тема». Такое сообщение не может быть доставлено в соответствии с ограничениями на сервере.

  5. Превышен лимит отправки электронных сообщений. На некоторых серверах есть лимит количества отправленных электронных сообщений в час. Если этот лимит превышен, сервер не будет доставлять электронные сообщения. Вы должны подождать некоторое время, для того чтобы снова иметь возможность отправлять электронные сообщения.

Как Вы можете видеть, наиболее часто данная ошибка возникает из-за настроек сервера. Поэтому, обратитесь к вашему хостинг-провайдеру напрямую, для того чтобы правильно настроить ваш профиль электронной почты. Это сэкономит ваше время и поможет быстрее устранить проблему, из-за которой возникает ошибка ‘Could not instantiate mail function’.

Не удалось отправить форму (4): Could not instantiate mail function.

Ошибка  вызвана тем, что в разделе  wwwдомены в поле E-Mail администратора и в настройках формы обратной связи в поле форма будет отослана на эту Эл. почту указаны разные почтовые почтовые ящики.

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

Для исправления  ошибки:

1. Авторизуйтесь в личном кабинете.

2. Перейдите в услугу «Конструктор сайтов». 

3. Выберите раздел www, wwwдомены. Дважды кликните по вашему доменному имени.

4. Поле E-Mail администратора должно совпадать с полем форма будет отослана на эту Эл. почту, которое расположено в модуле «Конструктор сайтов».

 5. Для того, чтобы проверить какой почтовый ящик указан в поле форма будет отослана на эту Эл. почту, перейдите в модуль «Конструктор сайтов». 

6. Нажмите на элемент «Форма»

6. Откроется боковое меню, выберите Свойства почты.

7. Проверьте, чтобы в поле форма будет отослана на эту Эл. почту была указана та же почта, что и в услуге «Конструктор сайтов», раздел wwwдомены в поле E-Mail администратора (пункт 4.)

 Если почтовый ящик не совпадает измените его.

8. Опубликуйте ваш сайт и проведите повторную отправку через блок «Форма».

Возможно, вам также будет интересно:

  • Ошибка could not get debug privilege are you admin
  • Ошибка could not instantiate mail function cs cart
  • Ошибка could not get client dll
  • Ошибка could not initialize steam
  • Ошибка could not find zone call of duty

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии