¿Cuál es la mejor manera de usar la plantilla de correo electrónico en Zend/PHP?
-
19-09-2019 - |
Pregunta
Estoy trabajando en un sitio web donde los usuarios crean sus cuentas. Necesito enviar correo electrónico a los usuarios en muchos océanos. Por ejemplo, cuando se registre, olvidé la contraseña, el resumen del pedido, etc. Quiero usar plantillas de correo electrónico para esto. Necesito tus sugerencias para esto. Quiero usar una forma en que cambio cualquier plantilla de correo electrónico o inicio inicio sesión en menos tiempo y cambios.
He pensado en la siguiente forma:
Tengo una mesa para plantillas de correo electrónico como esta:
id
emailSubject
emailBody
emailType
Por ejemplo, cuando el usuario olvidó la contraseña:
identificación:
1
asunto del email:
ABC: Link for Password Change
cuerpo del correo electronico:
<table border=0>
<tr><td>
<b> Dear [[username]] <b/>
</td></tr>
<tr><td>
This email is sent to you in response of your password recovery request. If you want to change your password, please click the following link:<br />
[[link1]]
<br/>
If you don't want to change your password then click the following link:<br/>
[[link2]]
</tr></td>
<tr><td>
<b>ABC Team</b>
</td></tr>
</table>
Type de correo electrónico:
ForgotPassword
Prepare los datos de correo electrónico:
$emailFields["to"] = "user@abc.com";
$emailFields["username"] = "XYZ";
$emailFields["link1"] = "http://abc.com/changepassword?code='123'";
$emailFields["link2"] = "http://abc.com/ignorechangepasswordreq?code='123'";
$emailFields["emailTemplate"] = "ForgotPassword";
Ahora pase todos los campos a esta función para enviar correo electrónico:
sendEmail( $emailFields ){
// Get email template from database using emailTemplate name.
// Replace all required fields(username, link1,link2) in body.
// set to,subject,body
// send email using zend or php
}
Planeé usar el método anterior. ¿Puede sugerir una mejor manera o algún cambio en la lógica anterior?
Gracias.
Solución
Yo usaría Zend_View
. Guarde sus plantillas en /views/email/EMAILNAME.phtml
, crear un Zend_View
Objeto con la plantilla de correo electrónico requerida y pase los datos requeridos.
Otros consejos
Fuera de la parte superior de mi cabeza, tan sin probar ... pero algo similar debería funcionar:
$view = new Zend_View();
$view->setScriptPath( '/path/to/your/email/templates' );
$view->assign( $yourArrayOfEmailTemplateVariables );
$mail = new Zend_Mail();
// maybe leave out phtml extension here, not sure
$mail->setBodyHtml( $view->render( 'yourHtmlTemplate.phtml' ) );
$mail->setBodyText( $view->render( 'yourTextTemplate.phtml' ) );
Como se menciono antes, Zend_View
es el camino. Así es como hago esto:
$template = clone($this->view);
$template->variable = $value;
$template->myObject = (object)$array;
// ...
$html = $template->render('/path/filename.phtml');
Use Markdownify para encubrir al texto plano:
$converter = new Markdownify_Extra;
$text = $converter->parserString($html);
Correo de configuración:
$mail = new Zend_Mail();
$mail->setBodyHtml($html);
$mail->setBodyText($text);
Luego configure el transporte y envíe.