Jump to content

[avanzado] obtener variables del objeto swift al enviar email


apositivo

Recommended Posts

Buenas, saludos cordiales a toda la comunidad prestashop !

 

el presente es para realizar una consulta ... creo que diriamos avanazada...

 

en la carpeta classes tenemos el archivo Mail.php , el cual realiza la logica para enviar un correo ( ejemplo el de bienvenida), en dicha clase tenemos el metodo Send

public static function Send($id_lang, $template, $subject, $template_vars, $to,
        $to_name = null, $from = null, $from_name = null, $file_attachment = null, $mode_smtp = null,
        $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null)
    { ....}

el cual en base a los parametro pasado construye la estrutura del objeto con la libreria swift

 

 

al final de ese metodo tenemos lo siguiente :

/* Send mail */
            $send = $swift->send($message, $to, new Swift_Address($from, $from_name));
            $swift->disconnect();

            ShopUrl::resetMainDomainCache();

donde la variable $message es un objeto  tiene mucha data , to, from, reply to  , entre otros.... tambien contien el mensaje en formato en html  que se enviara al cliente . . .

 

como puedo obtener dicho contenido de  esa vaiable  que tiene el html..

 

ejemplo

 

$message->body  ,  $message->content

 

 

 

aparentemente esta en el campo data de algun arreglo de ese objeto, pero como puedo acceder a el...

 

aqui le dejo parte de la estructura de dicho objeto

Swift_Message Object
(
[mimeWarning:protected] => This is a message in multipart MIME format. Your mail client should not be displaying this. Consider upgrading your mail client to view this message correctly.
[libVersion:protected] => 3.3.2
[references:protected] => Array
(
[parent] => Array
(
[alternative] => Swift_Message_Part Object
(
[headers] => Swift_Message_Headers Object
(
[emailContainingHeaders:protected] => Array
(
[0] => To
[1] => From
[2] => Reply-To
[3] => Cc
[4] => Bcc
[5] => Return-Path
[6] => Sender
)

[encoding:protected] => B
[charset:protected] => iso-8859-1
[headers:protected] => Array
(
[Content-Type] => multipart/alternative
[Content-Transfer-Encoding] => 7bit
)

[lowerHeaders:protected] => Array
(
[content-type] => multipart/alternative
[content-transfer-encoding] => 7bit
)

[attributes:protected] => Array
(
[content-type] => Array
(
[charset] =>
[format] =>
[boundary] => _=_swift-7768673955534577b6be382.72631708_=_
)

)

[forceEncoding:protected] =>
[language:protected] => en-us
[cached:protected] => Array
(
[content-type] => multipart/alternative;
boundary="_=_swift-7768673955534577b6be382.72631708_=_"
[content-transfer-encoding] => 7bit
)

[LE:protected] =>

)

[data:protected] =>
[wrap:protected] => 1000
[children:protected] => Array
(
[5534577b650c8] => Swift_Message_Part Object
(
[headers] => Swift_Message_Headers Object
(
[emailContainingHeaders:protected] => Array
(
[0] => To
[1] => From
[2] => Reply-To
[3] => Cc
[4] => Bcc
[5] => Return-Path
[6] => Sender
)

[encoding:protected] => B
[charset:protected] => iso-8859-1
[headers:protected] => Array
(
[Content-Type] => text/html
[Content-Transfer-Encoding] => 8bit
)

[lowerHeaders:protected] => Array
(
[content-type] => text/html
[content-transfer-encoding] => 8bit
)

[attributes:protected] => Array
(
[content-type] => Array
(
[charset] => utf-8
[format] =>
)

)

[forceEncoding:protected] =>
[language:protected] => en-us
[cached:protected] => Array
(
[content-type] => text/html; charset=utf-8
[content-transfer-encoding] => 8bit
)

[LE:protected] =>

)

[data:protected] => 

----------> este es el contenido en HTML  que quisiera sacar del objeto $message --------->>>>

 

Hola Pepe   Detalles de su cuenta   Gracias por crear una cuenta de cliente en Tusitio.com.

Estos son sus datos de acceso:

Dirección de E-mail: [email protected]
Clave: 123456   Consejos de Seguridad:
  1. Mantenga los datos de su cuenta en un lugar seguro.
  2. No comparta los detalles de su cuenta con otras personas.
  3. Cambie su clave regularmente.
  4. Si sospecha que alguien está usando ilegalmente su cuenta, avísenos inmediatamente.
  Ahora podrá realizar pedidos en nuestra tienda: Tutienda.com

 

Link to comment
Share on other sites

los parametros gift los mandan los controladores. Por ejemplo, al aceptar un pago, paymentexecution envia los parametros para swift y este envia el mail.

 

fijate el authconroller que esta en controllers, front y busca esta funcion

 

protected function sendConfirmationMail(Customer $customer)
{
if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL'))
return true;


return Mail::Send(
$this->context->language->id,
'account',
Mail::l('Welcome!'),
array(
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname,
'{email}' => $customer->email,
'{passwd}' => Tools::getValue('passwd')),
$customer->email,
$customer->firstname.' '.$customer->lastname
);
}
Link to comment
Share on other sites

hola

shacker, saludos cordiales, gracias por  responder.

 

correcto , alli estoy claro del authcontroller

 


 

protected function sendConfirmationMail(Customer $customer)
{
if (!Configuration::get('PS_CUSTOMER_CREATION_EMAIL'))
return true;

return Mail::Send(
$this->context->language->id,
'account',
Mail::l('Welcome!'),
array(
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname,
'{email}' => $customer->email,
'{passwd}' => Tools::getValue('passwd')),
$customer->email,
$customer->firstname.' '.$customer->lastname
);

pero si revisamos, el contenido por ejemplo del correo (que aparentemente se encuentra en la variable $message), se arma como tal en  el metodo send

en la parte....

/* Create mail && attach differents parts */
            $message = new Swift_Message('['.Configuration::get('PS_SHOP_NAME').'] '.$subject);
            $templateVars['{shop_logo}'] = (file_exists(_PS_IMG_DIR_.'logo_mail.jpg')) ?
                $message->attach(new Swift_Message_Image(new Swift_File(_PS_IMG_DIR_.'logo_mail.jpg'))) : ((file_exists(_PS_IMG_DIR_.'logo.jpg')) ?
                    $message->attach(new Swift_Message_Image(new Swift_File(_PS_IMG_DIR_.'logo.jpg'))) : '');
            $templateVars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME'));
            $templateVars['{shop_url}'] = Tools::getShopDomain(true, true).__PS_BASE_URI__;
            $swift->attachPlugin(new Swift_Plugin_Decorator(array($to_plugin => $templateVars)), 'decorator');
            if ($configuration['PS_MAIL_TYPE'] == 3 || $configuration['PS_MAIL_TYPE'] == 2)
                $message->attach(new Swift_Message_Part($templateTxt, 'text/plain', '8bit', 'utf-8'));
            if ($configuration['PS_MAIL_TYPE'] == 3 || $configuration['PS_MAIL_TYPE'] == 1)
                $message->attach(new Swift_Message_Part($templateHtml, 'text/html', '8bit', 'utf-8'));
            if ($fileAttachment && isset($fileAttachment['content']) && isset($fileAttachment['name']) && isset($fileAttachment['mime']))
                $message->attach(new Swift_Message_Attachment($fileAttachment['content'], $fileAttachment['name'], $fileAttachment['mime']));

y parece que es alli donde se arma el HTML del email... (donde anexa la plantilla correspondiente)

 

----------> este es el contenido en HTML  que quisiera sacar del objeto $message --------->>>>

 

Hola Pepe   Detalles de su cuenta   Gracias por crear una cuenta de cliente en Tusitio.com.

Estos son sus datos de acceso:

Dirección de E-mail: [email protected]
Clave: 123456   Consejos de Seguridad:

  1. Mantenga los datos de su cuenta en un lugar seguro.
  2. No comparta los detalles de su cuenta con otras personas.
  3. Cambie su clave regularmente.
  4. Si sospecha que alguien está usando ilegalmente su cuenta, avísenos inmediatamente.

  Ahora podrá realizar pedidos en nuestra tienda: Tutienda.com

Edited by apositivo (see edit history)
Link to comment
Share on other sites

ese es el archivo account.html, que esta dentro de la carpeta mails.

solo se pasan un par variables ahi, ya que el archivo es html, te lo pego aqui

 

HOLA {FIRSTNAME} {LASTNAME},
GRACIAS POR CREAR UNA CUENTA DE CLIENTE EN {SHOP_NAME}.    

DETALLES DE SU CUENTA EN {SHOP_NAME}

Estos son sus datos de acceso:
Dirección email: {email}
Contraseña: {passwd}
     

CONSEJOS DE SEGURIDAD:

  1. Mantenga los datos de su cuenta en un lugar seguro.
  2. No comparta los detalles de su cuenta con otras personas.
  3. Cambie su clave regularmente.
  4. Si sospecha que alguien está usando ilegalmente su cuenta, avísenos inmediatamente.
    Ahora podrá realizar pedidos en nuestra tienda: {shop_name}
Link to comment
Share on other sites

hola   shacker saludos, si amigo, en eso estoy claro, pero el detalle es que quiero capturar cualquier tipo de mensaje ya armado en base a la acción realizada (  registro en la tienda. , cambio de status en las ordenes, mensajes al clientes), todos ellos pasan por el archivo Mail.php  que contiene el metodo  public static function Send, es alli donde se arma ese contenido ( con las correspondientes plantillas de account.html, refound.html, payment.html, o cualquier otra ) en base a la accion que se toma.

 

eso es lo que necesito, el contenido HTML ya armado en el metodo Send.

 

que puede ser cualquier contenido que se le envia al cliente.

Link to comment
Share on other sites

se que el contenido esta en en el objeto Swift_Message Object , pero no se si prestashop tiene alguna manera de lograr acceder a dicho contenido de manera mas optima.

 

estoy leyendo la referencia dde la classe Swift_Message

me encontre con

 Swift_Message::getBody (  

)

 

 

 

 voy a seguir leyendo

Edited by apositivo (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...