Новосибирск +7(983)

По всем вопросам :

Телеграм : @radgura

VirtueMart 3 - не отправляется почта

Решение этой проблемы состоит в нескольких вариантах:

1.Статусы

Необходимо корректно настроить статусы, при которых будет отправляться письмо

Вкладка "Настройки" - "Электронная почта"

  • Статус заказа по умолчанию для создания выписанного счета - указать статус для нового заказа, должен быть "Pennding"
  • Статус заказа по умолчанию для отправки эл.письма покупателю - также указать "Pennding" + добавить другие интересующие статусы
  • Статус заказа по умолчанию для отправки эл.письма продавцу - также указать "Pennding" + добавить другие интересующие статусы

 email settings2

 Можно также указать принудительно статусы, которые будут формировать письмо. Необходимо отредактировать файл administrator/components/com_virtuemart/models/orders.php

 // Send the email
                //$res = shopFunctionsF::renderMail('invoice', $order['details']['BT']->email, $vars, null,$vars['doVendor'],$this->useDefaultEmailOrderStatus);
                $sendMail = false;
                if(!$this->useDefaultEmailOrderStatus and isset($vars['newOrderData']['customer_notified']) and $vars['newOrderData']['customer_notified']==1){
                        $sendMail = true;
                } else {
                        $orderstatusForShopperEmail = VmConfig::get('email_os_s',array('U','C','S','R','X'));
                        if(!is_array($orderstatusForShopperEmail)) $orderstatusForShopperEmail = array($orderstatusForShopperEmail);
                        
                        $orderstatusForShopperEmail[] = 'P';//TODO: Фикс для того чтобы письма отправлялись покупателю сразу после заказа
                        if ( in_array((string) $vars['orderDetails']['details']['BT']->order_status,$orderstatusForShopperEmail) ){
                                $sendMail = true;
                                vmdebug('renderMail by default orderstati');
                        }
                }

2.Проблемы с доставщиком почты

Рекомендуется в настройках указать отправку через smtp

Если же вы используете phpmailer, необходимо в файле libraries/vendor/phpmailer/phpmailer/class.phpmailer.php исправить код:

private function mailPassthru($to, $subject, $body, $header='', $params='')
{
//Check overloading of mail function to avoid double-encoding
if (ini_get('mbstring.func_overload') & 1) {
$subject = $this->secureHeader($subject);
} else {
$subject = $this->encodeHeader($this->secureHeader($subject));
}
//Can't use additional_parameters in safe_mode
//@link http://php.net/manual/en/function.mail.php
if (ini_get('safe_mode') or !$this->UseSendmailOptions) {
$result = @mail($to, $subject, $body, $header);
} else

{
//$result = @mail($to, $subject, $body, $header, $params);
$result = @mail($to, $subject, $body, $header);
}
return $result;
}

3.Исправление функции отправки

Если первые два способа не помогли, то остается еще один - изменить саму функцию отправки письма.

Редактируем файл /components/com_virtuemart/helpers/shopfunctionsf.php необходимо функцию sendVmMail заменить на этот код:

public static function sendVmMail (&$view, $recipient, $noVendorMail = FALSE) 
{
ob_start();
$view->renderMailLayout( $noVendorMail, $recipient );
$body = ob_get_contents();
ob_end_clean();
$app = JFactory::getApplication();
$subject = (isset($view->subject)) ? $view->subject : vmText::_( 'COM_VIRTUEMART_DEFAULT_MESSAGE_SUBJECT' );
$email = new PHPMailer();
if(isset($view->mediaToSend)) { foreach( (array)$view->mediaToSend as $media ) {$email->AddAttachment($media);}}
$email->From='почта магазина';;
$email->FromName = $view->vendor->vendor_name;
$email->Subject = html_entity_decode( $subject , ENT_QUOTES, 'UTF-8');
$email->IsHTML(true);
$email->Body= $body;
$email->AddAddress($recipient);
$email->AddAddress('ваша почта';);
$return=$email->Send();
return $return;
}

 

Комментарии (0)

Здесь ещё нет оставленных комментариев.

Оставьте свой комментарий

  1. Добавление комментария от гостя.
Вложения (0 / 3)
Share Your Location

Как с нами связаться

По всем вопросам пишите  

Телеграм: @radgura

OnLine заказ

Отправить сообщение

Нажимая на кнопку «Отправить сообщение», я соглашаюсь:
* с условиями публичной оферты
* обработку моих персональных данных


RAD компоненты

Please publish modules in offcanvas position.