<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Iw2 &#187; mail</title>
	<atom:link href="http://www.iw2.fr/tag/mail/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.iw2.fr</link>
	<description>Veille techno, web 2.0, Symfony, Magento, Drupal, Gestion de projet...</description>
	<lastBuildDate>Tue, 23 Aug 2011 06:46:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Serveur de mail local pour vos développements PHP et autre</title>
		<link>http://www.iw2.fr/2010/09/11/serveur-de-mail-local-pour-vos-developpements-php-et-autre/</link>
		<comments>http://www.iw2.fr/2010/09/11/serveur-de-mail-local-pour-vos-developpements-php-et-autre/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 10:10:16 +0000</pubDate>
		<dc:creator>jmartin</dc:creator>
				<category><![CDATA[Divers]]></category>
		<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://www.iw2.fr/?p=373</guid>
		<description><![CDATA[Voici un petit article technique pour se créer un serveur de mail local afin de pouvoir envoyer des mails depuis PHP de n&#8217;importe où. Ma configuration de travail : Mac Book avec un serveur Debian monté sur une VirtualBox. Après &#8230; <a href="http://www.iw2.fr/2010/09/11/serveur-de-mail-local-pour-vos-developpements-php-et-autre/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Voici un petit article technique pour se créer un serveur de mail local afin de pouvoir envoyer des mails depuis PHP de n&#8217;importe où.</p>
<p>Ma configuration de travail : Mac Book avec un serveur Debian monté sur une VirtualBox.</p>
<p>Après avoir essayé postfix/exim4 et passé des heures à essayer de configurer tout cela pour que mes mails partent&#8230; sans succès franc&#8230; J&#8217;ai décidé de me tourner vers une autre alternative plus light et plus facile à installer et configurer pour que cela marche dans TOUS LES CAS!</p>
<h2>Solution : SSMTP + GMAIL</h2>
<h3>SSMTP</h3>
<p>Tout d&#8217;abord, installez le paquet SSMTP qui permet d&#8217;envoyer des emails depuis votre machine vers l&#8217;extérieur via un smtp extérieur.</p>
<pre class="brush: php; title: ;">

apt-get install ssmtp
</pre>
<h3>Créer un compte GMAIL</h3>
<p>Rendez-vous ensuite sur mail.google.com pour se créer un compte dédié à l&#8217;envoi de mail depuis votre serveur.</p>
<h3>Configuration de SSMTP</h3>
<p>Editez le fichier /etc/ssmtp/ssmtp.conf</p>
<pre class="brush: php; title: ;">

root=vous@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=vous@gmail.com
FromLineOverride=YES
UseSTARTTLS=YES
AuthUser=vous
AuthPass=votremotdepasse
</pre>
<p>C&#8217;est tout <img src='http://www.iw2.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Vous pouvez maintenant envoyer vos mails depuis PHP sans vous soucier de quoi que ce soit d&#8217;autre!</p>
<p>To be continued&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.iw2.fr/2010/09/11/serveur-de-mail-local-pour-vos-developpements-php-et-autre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Symfony et les templates de mail dynamiques</title>
		<link>http://www.iw2.fr/2010/01/24/symfony-et-les-templates-de-mail-dynamiques/</link>
		<comments>http://www.iw2.fr/2010/01/24/symfony-et-les-templates-de-mail-dynamiques/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 08:11:40 +0000</pubDate>
		<dc:creator>jmartin</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[sfMailer]]></category>

		<guid isPermaLink="false">http://www.iw2.fr/?p=169</guid>
		<description><![CDATA[Je vais maintenant aborder un aspect important dans tout bon projet Web : L&#8217;envoi de mails. Tout site internet a, dans 90% des cas (pour ma part) besoin d&#8217;envoyer des mails automatiques : - confirmation d&#8217;inscription - mot de passe &#8230; <a href="http://www.iw2.fr/2010/01/24/symfony-et-les-templates-de-mail-dynamiques/">Continuer la lecture <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p style="clear: both">Je vais maintenant aborder un aspect important dans tout bon projet Web : L&#8217;envoi de mails.</p>
<p style="clear: both">Tout site internet a, dans 90% des cas (pour ma part) besoin d&#8217;envoyer des mails automatiques :<br />
- confirmation d&#8217;inscription<br />
- mot de passe oublié<br />
- notifications pour messages reçus<br />
- etc&#8230;</p>
<p style="clear: both">Pour mes projets, j&#8217;avais plusieurs besoins (ou envies <img src='http://www.iw2.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )<br />
- un jolie template de mail (c&#8217;est toujours agréable de recevoir un jolie mail)<br />
- véhiculer l&#8217;information principale de ce mail<br />
- apporter des informations dynamique pour donner vie au mail.</p>
<p style="clear: both">Avec Symfony 1.3 &amp; 1.4, l&#8217;envoi de mail a été simplifié grâce à l&#8217;apparition de SfMailer. Mais, je voulais aller plus loin, en utilisant le même modèle Symfony -&gt; actions/templates/partials/composants pour les contenus de mail.</p>
<p style="clear: both">Je vais vous présenter cela par un exemple concret : Une confirmation d&#8217;inscription.</p>
<h2 style="clear: both">1. Problématique</h2>
<p style="clear: both">Suite à une inscription sur votre site Internet, vous désirez envoyer un email de remerciement accompagné des derniers membres inscris et la dernière news rédigée.</p>
<h2 style="clear: both">2. Le template de mail</h2>
<p style="clear: both">Créer un fichier apps/frontend/templates/layout_mail.php avec dedans le contenu de votre template :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
&lt;html&gt;
  &lt;head&gt;...&lt;/head&gt;
  &lt;body&gt;
    &lt;div class='header'&gt; ... Votre haut de mail &lt;/div&gt;
    &lt;div class='content'&gt; &lt;?php echo $sf_content ?&gt;  &lt;/div&gt;
    &lt;div class='footer'&gt; ... Votre pied de mail &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<h2 style="clear: both">3. Centralisation des emails</h2>
<p style="clear: both">L&#8217;idée est de centraliser dans un module tous les différents mails envoyés automatiquement depuis le site Internet. Créer un module mail :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
symfony generate:module frontend mail
</pre>
<p style="clear: both">Editer le fichier actions.class.php de ce module pour rajouter l&#8217;action pour l&#8217;email d&#8217;inscription :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
&lt;?php
class mailActions extends sfActions
{
  public function preExecute()
  {
    //On précise ici que tous les mails utiliseront le layout que nous avons spécialement défini pour cela
    $this-&gt;setLayout('layout_mail');
  }
  public function executeInscription(sfWebRequest $request)
  {
    $this-&gt;member = Doctrine::getTable('member')-&gt;find($request-&gt;getParameter('id'));
  }
}
</pre>
<p style="clear: both">
<h2>4. Dynamisation des mails grâce aux components</h2>
<p style="clear: both">Créer le fichier components.class.php dans le module mail :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
&lt;?php

class mailComponents extends sfComponents
{
  public function executeLastMembers()
  {
    $this-&gt;members = Doctrine::getTable('member')-&gt;getLast();
  }
  public function executeLastNews()
  {
    $this-&gt;news = Doctrine::getTable('news')-&gt;getLast();
  }
}
</pre>
<p style="clear: both">
<p>Créer ensuite les deux templates pour ces components : _lastMembers.php et _lastNews.php avec dedans l&#8217;affichage des derniers membres et de la dernière news comme vous le souhaitez.</p>
<h2 style="clear: both">5. Le template pour le mail d&#8217;inscription</h2>
<p style="clear: both">Créer le fichier inscriptionSuccess.php dans le dossier templates du module mail :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
&lt;div&gt;
 &lt;?php echo $member-&gt;getFullName() ?&gt;, nous vous remercions pour votre inscription sur www.iw2.fr.
&lt;/div&gt;

&lt;!-- Nous incluons ici les deux components pour afficher les derniers membres et la dernière news --&gt;

&lt;?php include_component('mail', 'lastMembers')?&gt;

&lt;?php include_component('mail', 'lastNews')?&gt;
</pre>
<p style="clear: both">
<h2>6. Une classe mailer pour l&#8217;envoi des mails</h2>
<p style="clear: both">Cette classe se compose de deux méthodes: une pour centraliser les sujets de mails et l&#8217;autre pour l&#8217;envoi. Créer un fichier mailer.class.php dans le dossier lib.</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
class mailer
{
  static public function getSubject($action)
  {
    $subject = array();
    $subject['inscription'] = &quot;Confirmation de votre inscription&quot;;
    //$subject['nom_de_l'action_du_module_mail'] = &quot;Le sujet de ce mail&quot;;
    return $subject[$action];
  }

  static public function send ($dest, $action)
  {
    //En premier paramètre nous avons l'adresse mail du destinataire ou un tableau d'emails. En second paramètre nous avons le nom de l'action du module mail

    //On initialise l'objet mailer avec le destinataire et le sujet.
    $mailer = sfContext::getInstance()-&gt;getMailer()-&gt;compose(
              null,
              $dest,
              mailer::getSubject($action)
    );
    //On initialise le FROM avec des valeurs définie dans le app.yml par exemple
    $mailer-&gt;setFrom(sfConfig::get('app_mailer_from'), sfConfig::get('app_mailer_name'));
    //On précise un rendu de type html
    $mailer-&gt;setContentType(&quot;text/html&quot;);
    //On rajoute le contenu du mail en récupérant le rendu de l'action du module mail
    $mailer-&gt;setBody(sfContext::getInstance()-&gt;getController()-&gt;getPresentationFor('mail', $action));
    //On envoi le mail
    sfContext::getInstance()-&gt;getMailer()-&gt;send($mailer);
  }
}
</pre>
<p style="clear: both">
<p>Penser à faire un symfony cc à ce niveau pour prendre en compte cette nouvelle classe.</p>
<h2 style="clear: both">7. Au niveau de l&#8217;action d&#8217;inscription</h2>
<p style="clear: both">Dans votre action qui enregistre l&#8217;inscription, exemple :</p>
<p style="clear: both">
<pre class="brush: php; title: ;">
public function executeCreate(sfWebRequest $request)
{
  $this-&gt;form = new memberForm();
  if( $request-&gt;isMethod('post') )
  {
    $this-&gt;form-&gt;bind($request-&gt;getParameter( $this-&gt;form-&gt;getName() ), $request-&gt;getFiles($this-&gt;form-&gt;getName()));
    if($this-&gt;form-&gt;isValid()) {
      $member = $this-&gt;form-&gt;save();
      //On passe un paramètre à l'objet Request pour le récupérer au niveau de l'action du module mail
      $this-&gt;getRequest()-&gt;setParameter('id', $member-&gt;getId());
      //On envoi le mail
      mailer::send($pro-&gt;getEmail(), 'inscription');

      $this-&gt;redirect('page/remerciement');
    }
  }
}
</pre>
<h2 style="clear: both">8. Exemple de rendu</h2>
<p><a class="highslide" href="http://www.iw2.dev/wp-content/uploads/2010/01/mail-keldeco.png"><img class="aligncenter size-medium wp-image-197" title="mail-keldeco" src="http://www.iw2.fr/wp-content/uploads/2010/01/mail-keldeco-300x244.png" alt="mail-keldeco" width="300" height="244" /></a></p>
<h2 style="clear: both">9. Conclusion</h2>
<p style="clear: both">N&#8217;ayant rien trouvé sur internet pour répondre à mes besoins en matière d&#8217;envoi de mail &laquo;&nbsp;dynamique&nbsp;&raquo;, j&#8217;ai décidé de partager avec vous ma solution. Je conçois que celle-ci ne répond peut être pas à tous les critères de BEST PRACTICES Symfony pour le moment, mais c&#8217;est une première ébauche qui remplie 100% son rôle. N&#8217;hésitez pas si vous avez des questions ou des commentaires.</p>
<p style="clear: both">To be continued&#8230;</p>
<p style="clear: both">
<p><br class="final-break" style="clear: both" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.iw2.fr/2010/01/24/symfony-et-les-templates-de-mail-dynamiques/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

