developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

Last modified 12 years ago

#530 closed enhancement (fixed)

jMailer and tpl

Reported by: Lipki Owned by: bastnic
Priority: low Milestone: Jelix 1.1 beta 1
Component: jelix:utils Version: 1.0.4
Severity: minor Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Les mails que j'envoie sont écrit dans des tpl.

J'ai un module mail, avec dedans un tpl par type de mail, je trouve ce système très pratique.

J'utilise les méta pour les informations sur le mail, comme par exemple le sujet du mail.

Voilà ce que cela donne :

tpl

{meta sujet '[Site] Confirmation d'inscription.'}

Bonjour {$user->civilite_utilisateur|upper} {$user->nom_utilisateur},

Merci de vous être enregistré{if $user->civilite_utilisateur != 'm'}e{/if} sur site.com.
Votre compte a été créé correctement.

Vous pouvez vous connecter à http://www.site.com/compte en utilisant le nom d'utilisateur et le mot de passe suivant:

Nom d'utilisateur - {$user->mail_utilisateur} 
Mot de passe - {$passe}

et pour envoyer le mail.

$mail = new jMailer();
$mailtpl = new jTpl();
$mailtpl->assign('user', $user);
$mailtpl->assign('passe', $pass);
$metas = $mailtpl->meta('mail~motdepasse');
$mail->Subject = $metas['sujet'];
$mail->Body = $mailtpl->fetch('mail~motdepasse');
$mail->AddAddress($user->mail_utilisateur , $user->nom_utilisateur);
$mail->Send();

Ce n'est pas grand choses, mais ça pourrait être intégrer dans jMailer, on écrirais donc.

$mail = new jMailer();
$mail->Tpl('mail~motdepasse', array('user'=>$user, 'passe'=>$passe));
$mail->AddAddress($user->mail_utilisateur , $user->nom_utilisateur);
$mail->Send();

jMailer ce chargerais alors de récupérer les métas, de les mettre au bonne endroit, d'assigner les variables, de faire un fetch sur le contenu.

Quand pensez vous ??

Attachments (3)

jmailer.diff (3.5 KB) - added by Lipki 12 years ago.
jmailer.2.diff (4.5 KB) - added by Lipki 12 years ago.
jmailer.3.diff (3.5 KB) - added by Lipki 12 years ago.

Download all attachments as: .zip

Change History (25)

comment:1 Changed 12 years ago by Lipki

  • Type changed from bug to enhancement

comment:2 Changed 12 years ago by laurentj

  • Component changed from jelix to jelix:utils
  • Severity changed from normal to minor

Ça peut être sympa en effet.

comment:3 Changed 12 years ago by Lipki

  • Owner set to Lipki
  • review set to review?
  • Status changed from new to assigned

Hop voila un patch pour ce ticket

Une démo a cette adresse http://jelix.toopi.info/index.php?module=mail&action=default:index

Changed 12 years ago by Lipki

comment:4 Changed 12 years ago by laurentj

  • review changed from review? to review-

A-t-on vraiment besoin de réinjecter les informations du mail dans le template (tout les $mailtpl->assign()) ? Tu as des exemples où c'est utile ?

Je n'aime pas ta fonction decAdrs. Une syntaxe courante (qui d'ailleurs fait peut être partie des specs RFC quelque part), est "nom <email>". Donc il faut que decAdrs parse ce genre de chaîne. (Avec des noms de variables en anglais ;-) ). Et je pense que parseEmailAddress est mieux comme nom.

   function parseEmailAddress ($email) {
     ..
     return array('email', 'name');
   }

Le test "if( isset($this->BodyTpl?) ) { " n'est pas bon. Il vaux mieux tester avec la valeur vide.

comment:5 Changed 12 years ago by laurentj

  • Milestone set to Jelix 1.1 beta 1

comment:6 Changed 12 years ago by Lipki

$mailtpl->assign('Priority', $this->Priority );

Permet d'afficher un message indiquant la priorité du mail :

/!\ Ce mail doit être traité en priorité.

$mailtpl->assign('From', $this->From ); $mailtpl->assign('FromName?', $this->FromName? ); $mailtpl->assign('Sender', $this->Sender );

Afficher dynamiquemment le nom de l'expéditeur :

Mr {$FromName} vous souhait une agréable journée vous pouvez lui répondre a l'adresse {$sender}

$mailtpl->assign('to', $this->to );

Cette e-mail a était expédié a {boucle sur $to}

$mailtpl->assign('cc', $this->cc );

Une copie de cette e-mail a était expédié a {boucle sur $cc}

$mailtpl->assign('bcc', $this->bcc );

Une copie de cette e-mail a était expédié a {boucle sur $bcc}, mais vous pouvez pas le savoir AHAHAH ! (rire satanique)

$mailtpl->assign('ReplyTo?', $this->ReplyTo? );

Cette e-mail est envoyé par un robot, pour toutes demande de renseignement utiliser plutôt {$ReplyTo}

Certain exemple sont bidon, mais je pense que ça peut être utile de rendre ces info disponibles.

Je n'aime pas ta fonction decAdrs (...)

J'avais fait ce que tu propose au début, et puis je l'ais changer pour ce ":" Je ne sait plus exactement pourquoi, mais je crois que je voulais éviter les "<>".

Le test "if( isset( ... (...)

tu veut dire ??

if( !isset($this->BodyTpl) ) {
    ;
} else {
(...)
}

comment:7 Changed 12 years ago by laurentj

ok pour les assign :-)

Pour le test, je préfère un if($this->bodyTpl != ) plutôt que de faire un isset. Parce que si on donne une chaine vide, ton test sera true, ce qui n'est en fait pas vrai

comment:8 Changed 12 years ago by laurentj

arf, trac m'a bouffé ma chaine :-) Je voulais dire if($this->bodyTpl != "")

comment:9 Changed 12 years ago by Lipki

ok c'est partie.

comment:10 Changed 12 years ago by Lipki

Je n'aime pas ta fonction decAdrs. Une syntaxe courante (qui d'ailleurs fait peut être partie des specs RFC quelque part), est "nom <email>".

Bien vu RFC MSG Le Format des Messages de l'Internet ( 3.4 Spécification de l’adresse )

Changed 12 years ago by Lipki

comment:11 Changed 12 years ago by Lipki

  • review changed from review- to review?

comment:12 Changed 12 years ago by laurentj

  • review changed from review? to review-

I prefer this signature :

   function getAddrName($address)

and it returns an array($address, $name). Don't call methods, but store data directly in the property, it's easier. For example, instead of doing :

   $adr = $this->getAddrName($address);
   $this->AddCC($adr[0], $adr[1]);

Just do

    $this->cc[] = $this->getAddrName($address);

Same thing for AddAddress?, AddBcc? etc..

Use a regular expression (preg_match) in getAddrName, it's better than to do some explode etc, and do a trim on the address before to return it.

Carefull about the word address : it's not adresse or addresse ;-)

I don't know why you do this :

@@ -445,17 +522,17 @@
             $rt = @mail($to, $this->EncodeHeader($this->Subject), $body,
                         $header, $params);
         }
-        else
-            $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header);
+        else {
+            try {
+                $rt = mail($to, $this->EncodeHeader($this->Subject), $body, $header);
+            } catch ( Exeptions $e ) {
+                throw new jException('jelix~errors.mail.instantiate', $e->getMessage());
+            }
+        }
 
         if (isset($old_from))
             ini_set("sendmail_from", $old_from);
 
-        if(!$rt)
-        {
-            throw new jException('jelix~errors.mail.instantiate');
-        }
-

According to the documentation, there isn't exception thrown in the mail function if something goes wrong. (And you forgot to do the same thing with mail call just above the one you change)

comment:13 Changed 12 years ago by bballizlife

Juste pour savoir où en est ce ticket avec le patch à corriger suite à la review de laurentj.

comment:14 Changed 12 years ago by bastnic

  • Owner changed from Lipki to bastnic
  • Status changed from assigned to new

lipki just disappeared, i will look at this one.

comment:15 Changed 12 years ago by Lipki

ro l'autre j'ai même pas disparu en plus ... :)

je check ça dans la journée.

Changed 12 years ago by Lipki

comment:16 Changed 12 years ago by Lipki

  • review changed from review- to review+
  • Version changed from 1.0.2 to 1.0.4

For the last point, I do not know why I change, but I knew that I had created errors in the local file.

I removal.

comment:17 Changed 12 years ago by bastnic

  • review changed from review+ to review?

Lipki : il ne faut pas mettre review+ ;)

comment:18 Changed 12 years ago by laurentj

  • review changed from review? to review+

comment:19 Changed 12 years ago by bastnic

  • Resolution set to fixed
  • Status changed from new to closed

I need it, so I just commited it. Thanks Kevin

comment:20 Changed 12 years ago by bballizlife

  • Documentation needed set

comment:22 Changed 12 years ago by Lipki

Thank you for translation :)

Note: See TracTickets for help on using tickets.