Calendario de Symfony día doce: Correo Electrónico ================================================== Previamente en symfony ---------------------- Ayer, la aplicación askeet fue extendida para transmitir contenido en otro medio, canales RSS. Symfony no es solo acerca de páginas web, y el tutorial de hoy lo ilustrara nuevamente. Enviaremos un correo electrónico aprovechándonos de la implementación MVC Recuperación de password ------------------------ El formulario de login (el AJAX en todas las página, y el clásico accedido por el menú superior) requiere un apodo y un password, pero ocurre muy a menudo que los usuarios lo olvidan. Debemos proporcionar un mecanismo para permitirle conectarse nuevamente en este caso. Como no guardamos el password en limpio, estaremos obligados a resetearlo a un password aleatorio, y enviarlo al usuario por correo electrónico. Por ahora, un usuario no puede modificar su password, así que el password aleatorio no será fácil de recordar, pero corregiremos esto más tarde. ### Formulario de reset password En el modulo del usuario `user`, crearemos una nueva acción que mostrara un formulario solicitando una dirección de correo. En `askeet/apps/frontend/modules/user/actions/action.class.php`, agregue: [php] public function executePasswordRequest() { } En `modules/user/templates/`, crea lo siguiente `passwordRequestSuccess.php`: [php]
Did you forget your password? Enter your email to receive your login details:
get('email'), 'style=width:150px') ?>Your login information was sent to
get('email') ?>
You should receive it shortly, so you can proceed to the .
Enviar un correos electrónico ----------------------------- Vale, así que si un usuario ingresa una dirección de correo electrónico valido, una acción es llamada. Ahora necesitamos crearla. ### Acción de envió de correo electrónico Cree un nuevo modulo `mail`: $ symfony init-module frontend mail Agregue una nueva acción `sendPassword` a este módulo: [php] public function executeSendPassword() { $mail = new sfMail(); $mail->addAddress($this->getRequestParameter('email')); $mail->setFrom('AskeetDear askeet user,
A request for getSubject() ?> was sent to this address.
For safety reasons, the askeet website does not store passwords in clear. When you forget your password, askeet creates a new one that can be used in place.
You can now connect to your askeet profile with:
nickname:
password:
To get connected, go to the and enter these codes.
We hope to see you soon on
The askeet email robot
Justo como cualquier otra plantilla, los helpers estándares (como el `link_to()` utilizado aquí) trabaja sin problemas en una plantilla de correo electrónico. También puede insertar cualquier HTML para la presentación que necesite para hacer el correo electrónico luzca bien. Embebiendo una imagen es tan simple como pasar un parámetro `sid`: correspondiente a la id única de la imagen cargada en la acción. ### Plantilla de correo alternativa Si la vista encuentra un `sendPasswordSuccess.altbody.php`, será utilizado para agregar un cuerpo (texto) alternativo al correo electrónico. Esto le permite definir plantillas solo-texto para cliente que no acepten HTML: [php] Dear askeet user, A request for getSubject() ?> was sent to this address. For safety reasons, the askeet website does not store passwords in clear. When you forget your password, askeet creates a new one that can be used in place. You can now connect to your askeet profile with: nickname: password: To get connected, go to the login page (http://www.askeet.com/login) and enter these codes. We hope to see you soon on askeet! The askeet email robot ### Configuración El `sfMail` siendo la vista definida para la acción, puede aceptar configuración adicional. Cree un archivo de configuración `mailer.yml`: dev: deliver: off all: mailer: sendmail Este señala el programa a ser utilizado par enviar correos, y desactiva el envió de correo en el entorno de desarrollo - los correo electrónico en los datos de prueba son falsos igualmente. No quiere que los usuario tengan acceso directo a esta acción. Así que cree un `module.yml` en el directorio del modulo ` config/` con: all: is_internal: on ### Pruebas Pruebe el nuevo sistema de recuperación de password creando un usuario custom en la data de prueba con su correo electrónico personal, lance el batch `import_data.php` Limpie el cache y navegue a la página de recuperación de password en el entorno de producción. Después de entrar su dirección de correo electrónico y enviando el formulario, debería recibir el correo electrónico próximamente.  Le veo mañana ------------- El sistema de correo electrónico en symfony es ambos simple y poderoso. Correos electrónico simples son fáciles de enviar como es posible; correos electrónico complejos no son más complejos de escribir que complejo página HTML, y toma completo ventaja de la arquitectura MVC. Así que para su próxima campaña de correo electrónico, quizás debería utilizar symfony en lugar de una solución de mailing comercial... Sin embargo, mañana será el día de etiquetas. Las preguntas Askeet serán etiquetadas, las etiquetas se podrán buscar, y le dará la más simpática nube de etiquetas que alguna vez haya soñado. Como es usual, el código de hoy estará disponible en el [repositorio SVN de askeet](http://svn.askeet.com/tags/release_day_12/), etiquetado `/tags/release_day_12`. Todavía estamos indeciso acerca de que platicar durante el día 21, así que deje su sugerencia en el [lista de correo de askeet](mailto:askeet-subscribe@symfony-project.com) o en el [foro de askeet](http://www.symfony-project.com/forum/index.php/f/8/).