Jump to content

(SOLUCIONADO) Estructura de la función Mail::Send


oddworldng

Recommended Posts

Buenas,

 

Estoy desarrollando un módulo que requiere el envío de e-mails, y necesito el uso de la función Mail::Send() de Prestashop, ya que mail() de PHP no está permitida oficialmente.

 

He buscado un poco y lo más que he encontrado es esta documentación, pero es sólo para configurar el envío de e-mails de tu tienda.

 

http://doc.prestashop.com/display/PS16/E-Mail+Parameters

 

Mi problema es que no se qué parámetros usa la función Mail::Send y en qué orden hay que ponerlos, o si por el contrario existe otra posibilidad.

 

Inicialmente, estoy usando esto y funciona, pero no me lo validan en Prestashop addons:

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

¿Alguien conoce la estructura de la función Mail::Send de Prestashop?

 

 

Un saludo,

y muchas gracias de antemano.

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

No sé si es lo que buscas, en la clase Mail function Send tienes esto

/**
	 * Send Email
	 *
	 * @param int $id_lang Language of the email (to translate the template)
	 * @param string $template Template: the name of template not be a var but a string !
	 * @param string $subject
	 * @param string $template_vars
	 * @param string $to
	 * @param string $to_name
	 * @param string $from
	 * @param string $from_name
	 * @param array $file_attachment Array with three parameters (content, mime and name). You can use an array of array to attach multiple files
	 * @param bool $modeSMTP
	 * @param string $template_path
	 * @param bool $die
     * @param string $bcc Bcc recipient
Link to comment
Share on other sites

He probado con los parámetros que dices, e incluso he usado el validador de Prestashop para ver si habían posibles errores, pero no envia e-mails.

 

En principio la estructura de la función Send() es la siguiente:

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)

Una duda que me surge es saber si la función Send(), dentro de la clase MailCore (descrita en el fichero classes/Mail.php), debe de estar dentro de una clase que sea heredada de la clase MailCore (class EnviarEmail extends MailCore), o simplemente escribiendo MailCore::Send() funcionaría.

 

Por otro lado, también he visto que se llama al método Send() de la siguiente manera: Mail::Send(), a pesar de no existir la clase Mail (que yo sepa) -> ver el fichero controllers/admin/AdminEmailsController.php linea 337

$result = Mail::sendMailTest(Tools::htmlentitiesUTF8($smtpChecked), Tools::htmlentitiesUTF8($smtpServer), Tools::htmlentitiesUTF8($content), Tools::htmlentitiesUTF8($subject), Tools::htmlentitiesUTF8($type), Tools::htmlentitiesUTF8($to), Tools::htmlentitiesUTF8($from), Tools::htmlentitiesUTF8($smtpLogin), $smtpPassword, Tools::htmlentitiesUTF8($smtpPort), Tools::htmlentitiesUTF8($smtpEncryption));

Lo que tengo hecho actualmente no envia emails:

Mail::Send(Tools::getValue('lang'), null, $subject, null, $to, $name_to, $from, $name_from, $file_attachment = null, $modeSMTP = false, $template_path = _PS_MAIL_DIR_, $die = false, $id_shop = null, $bcc = null)

¿Alguien sabe en qué puedo estar fallando?

Link to comment
Share on other sites

  • 2 weeks later...

Investigando un poco en otros foros, he econtrado en un post una posible respuesta (que aún no he probado) de por qué no me enviaba e-mail la funcion Mail::Send(). Cito textualmente:

 

"Mail function from prestashop core needs template file to send an email. The only way is usage of php mail() function - it is a simple mail funciton and you don't have to use there template file"

 

Fuente de información:

https://www.prestashop.com/forums/topic/278465-mailsend-fuction-without-template-file/

Link to comment
Share on other sites

Doy por SOLUCIONADO el tema.

 

Voy a explicar el proceso de la forma más detallada posible y con algunas capturas.

 

Lo primero que hay que tener en cuenta, es que en el fichero classes/Mail.php contiene la función y la estrctura del método Send() para enviar emails. Es la siguiente:

/**
* Send Email
*
* @param int $id_lang Language of the email (to translate the template)
* @param string $template Template: the name of template not be a var but a string !
* @param string $subject
* @param string $template_vars
* @param string $to
* @param string $to_name
* @param string $from
* @param string $from_name
* @param array $file_attachment Array with three parameters (content, mime and name). You can use an array of array to attach multiple files
* @param bool $modeSMTP
* @param string $template_path
* @param bool $die
* @param string $bcc Bcc recipient
*/

Teniendo esta estructura clara, podemos realizar algo así como esto (código obtenido del fichero Mail.php mencionado anteriormente):

Mail::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);

Tal y como puse en el post anterior a este, si no existe template para el email, este no se envía. Bien, por suerte para nosotros, Prestashop incluye un directorio _PS_MAIL_DIR_ donde podemos encontrar gran variedad de plantillas para nuestro email. Estas plantillas están en la carpeta mails/<idioma> del directorio raíz de nuestro Prestashop.

 

2d6o1ts.jpg

 

Hay que tener en cuenta también la variable $template_vars que contendrá las variables que nuestra plantilla necesite. Veamos el siguiente ejemplo:

 

  • Supongamos que nuestra plantilla utiliza la variable {shop_name}
  • Tendremos que definir lo siguiente: $template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME'));

Con esto se consiguen pasar variables a nuestra plantilla y obtener así correos más personalizados.

 

Aquí les muestro un ejemplo de una de las plantillas (personalizada) enviada ya por email:

 

f4h2dj.jpg

 

Para aclarar una de las dudas que me planteaba yo mismo al comienzo de este tema, es que para llamar a la función Send() de la clase Mail, se hace desde cualquier módulo que estés desarrollando realizando la llamada con Mail::Send()

 

Por último, y quizás es algo que me queda pendiente es que estos correos se están enviando a la carpeta SPAM (se puede observar en la captura anterior). Estos correos están siendo enviados a mi cuenta de Gmail, no se si con otro gestor de correos no pasa.

 

Espero que le sea útil a alguien que esté trabajando con el envío de correos, yo por lo menos no había encontrado nada concreto en foros ni documentación.

 

 

Un saludo.

  • Like 4
  • Thanks 2
Link to comment
Share on other sites

  • 11 months later...
  • 11 months later...
  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...