Joomla getMailer() не работает должным образом

Я пытаюсь использовать joomla mailer для отправки писем, но он не работает, есть предложения? что мне не хватает? Я искал в Интернете и SO, но это не помогло.

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

это реальный код:

<?php
//framework joomla
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR ); 
define( 'JPATH_BASE', realpath(dirname(__FILE__) . "/../"));
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );
$mainframe =& JFactory::getApplication('site');

//get vars
$session =& JFactory::getSession();
$num1 = $session->get('variable1');  
$num2 = $session->get('variable2');  
$val= $session->get('variable3');  
$uq= $session->get('unique');
$sendto= $session->get('mail');

//mail
$mailer =& JFactory::getMailer();
$mailer->setSender('[email protected]');
$recipient = array($sendto, '[email protected]');
$mailer->addRecipient($recipient);


$body   = '<h2>sometext</h2>'
    . '<div>sometext</div>'
    . '<div> blabla' echo $num1 'blabla </div>'
    . '<div> texttext' echo $num2 'texet </div>'
    . '<div> texttext' echo $val 'text </div>';

$mailer->isHTML(true);
$mailer->Encoding = 'base64';
$mailer->setBody($body);
$mailer->AddEmbeddedImage("$uq".".gif", "image_0", "", "base64", "image/gif");
$mailer->addAttachment("$uq".".gif");  

//send 
$send =& $mailer->Send();
if ( $send !== true ) {
    //Elimina .gif 
    $mask = "*.gif";
    array_map( "unlink", glob( $mask ) );
    unset($mailer); 
    echo 'error: ' . $send->message;
} else {
unset($mailer);
    //Elimina .gif 
    $mask = "*.gif";
    array_map( "unlink", glob( $mask ) );
    echo 'done';
}
?>

забыл добавить характеристики платформы:

Версия PHP 5.3.22

Джумла! Версия 2.5.9

если вам нужна любая другая информация, просто спросите.

обновление: я попробовал другую joomla! версия, упрощенная версия кода без переменных и с одним электронным письмом, простые текстовые электронные письма... кажется, ничего не работает. внутренняя ошибка сервера (500) с пустым журналом ошибок... (странно, но установка находится внутри подкаталога со многими другими установками, и мой веб-хостинг позволяет мне видеть только «корневой» журнал, поэтому я думаю, что это проблема из пустого журнала ошибок...)


person KentaS    schedule 24.04.2013    source источник
comment
Ошибка 500: загляните в error.log вашего веб-сервера. Там должна быть информация о вашей ошибке.   -  person Dmitry Rekun    schedule 25.04.2013


Ответы (3)


Не совсем уверен, что это корень вашей проблемы. Но $mail->setSender() принимает массив. Пример: $mail->setSender(array('ЭЛЕКТРОННАЯ ПОЧТА ОТПРАВИТЕЛЯ', 'ИМЯ ОТПРАВИТЕЛЯ'));

А ТАКЖЕ

$mail->addRecipient() принимает строку ИЛИ массив. Используйте массив, если вы отправляете электронное письмо нескольким получателям, и строку, когда вы отправляете электронное письмо только одному получателю.

Надеюсь это поможет

person PhiloWS    schedule 25.04.2013
comment
$mail-›setSender() принимает строки (только адрес электронной почты) или массив (адрес электронной почты и имя). спасибо за ответ, но ничего не изменится, если я помещу массивы или строки как в setSender, так и в addRecipient... - person KentaS; 26.04.2013

хорошо, решено!

это может помочь кому-то другому, вот как:

$config =& JFactory::getConfig();

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

//body email
$body   .= "<h2>Texttext</h2>" . "\n";
$body   .= "<div>TexttextTexttextTexttext" . $blockh .  " Texttext " . $blockd . "\n";
$body   .= "<div> TexttextTexttext <span> " .  $num1 . " </span> Texttext </div>" . "\n";
$body   .= "<div>TexttextTexttextTexttext <span> " .  $val . " </span> Texttext </div>";

предыдущая конкатенация тела не работала, похоже, для работы нужны двойные кавычки...

$mailer->isHTML();

"true" внутри не требуется, так как true является значением по умолчанию.

person KentaS    schedule 02.05.2013

В ответ на комментарий KentaS

предыдущая конкатенация тела не работала, похоже, для работы нужны двойные кавычки...

Он не имеет ничего общего с одинарными или двойными кавычками. В исходном сообщении у вас было:

$body   = '<h2>sometext</h2>'
. '<div>sometext</div>'
. '<div> blabla' echo $num1 'blabla </div>'
. '<div> texttext' echo $num2 'texet </div>'
. '<div> texttext' echo $val 'text </div>';

часть:

'<div> blabla' echo $num1 'blabla </div>'

вызывает синтаксическую ошибку (строка, за которой без конкатенации следует вызов "echo", за которой следует без конкатенации строка...!

Что-то, что работает с одинарными кавычками:

$body   = '<h2>sometext</h2>'
. '<div>sometext</div>'
. '<div> blabla' . $num1 . 'blabla </div>'
. '<div> texttext' . $num2 . 'texet </div>'
. '<div> texttext' . $val . 'text </div>';

А с двойными кавычками можно сделать еще короче:

$body   = "<h2>sometext</h2>"
. "<div>sometext</div>"
. "<div> blabla $num1 blabla </div>"
. "<div> texttext $num2 texet </div>"
. "<div> texttext $val text </div>";

С уважением,
Дом

person Dom74    schedule 05.09.2013