Решение этой проблемы состоит в нескольких вариантах:
1.Статусы
Необходимо корректно настроить статусы, при которых будет отправляться письмо
Вкладка "Настройки" - "Электронная почта"
- Статус заказа по умолчанию для создания выписанного счета - указать статус для нового заказа, должен быть "Pennding"
- Статус заказа по умолчанию для отправки эл.письма покупателю - также указать "Pennding" + добавить другие интересующие статусы
- Статус заказа по умолчанию для отправки эл.письма продавцу - также указать "Pennding" + добавить другие интересующие статусы
Можно также указать принудительно статусы, которые будут формировать письмо. Необходимо отредактировать файл 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;
}