Ticket #530 (closed enhancement: fixed)

Opened 5 months ago

Last modified 1 month ago

jMailer and tpl

Reported by: Lipki Assigned to: bastnic
Priority: low Milestone: Jelix 1.1 beta 1
Component: jelix:utils Version: 1.0.4
Severity: minor Keywords:
Cc: Php version:
Review: review+ Hosting Provider:
Documentation needed: 1 Blocking:

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

jmailer.diff (3.5 kB) - added by Lipki on 04/27/08 23:05:59.
jmailer.2.diff (4.5 kB) - added by Lipki on 05/21/08 20:04:56.
jmailer.3.diff (3.5 kB) - added by Lipki on 07/21/08 12:37:42.

Change History

03/31/08 16:30:43 changed by Lipki

  • type changed from bug to enhancement.

03/31/08 17:49:05 changed by laurentj

  • owner changed.
  • component changed from jelix to jelix:utils.
  • severity changed from normal to minor.

Ça peut être sympa en effet.

04/27/08 23:05:38 changed by Lipki

  • owner set to Lipki.
  • status changed from new to assigned.
  • review set to review?.

Hop voila un patch pour ce ticket

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

04/27/08 23:05:59 changed by Lipki

  • attachment jmailer.diff added.

05/05/08 00:20:40 changed 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.

05/05/08 00:20:49 changed by laurentj

  • milestone set to Jelix 1.1 beta 1.

05/05/08 14:09:22 changed 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 {
(...)
}

05/05/08 15:31:30 changed 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

05/05/08 15:32:18 changed by laurentj

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

05/05/08 16:16:41 changed by Lipki

ok c'est partie.

05/20/08 15:20:26 changed 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 )

05/21/08 20:04:56 changed by Lipki

  • attachment jmailer.2.diff added.

05/21/08 20:05:38 changed by Lipki

  • review changed from review- to review?.

05/28/08 11:10:23 changed 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)

07/02/08 08:43:31 changed by bballizlife

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

07/20/08 01:42:12 changed by bastnic

  • owner changed from Lipki to bastnic.
  • status changed from assigned to new.

lipki just disappeared, i will look at this one.

07/21/08 11:19:07 changed by Lipki

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

je check ça dans la journée.

07/21/08 12:37:42 changed by Lipki

  • attachment jmailer.3.diff added.

07/21/08 12:43:50 changed 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.

07/21/08 12:59:57 changed by bastnic

  • review changed from review+ to review?.

Lipki : il ne faut pas mettre review+ ;)

07/23/08 14:57:04 changed by laurentj

  • review changed from review? to review+.

07/24/08 08:35:00 changed by bastnic

  • status changed from new to closed.
  • resolution set to fixed.

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

07/24/08 08:50:58 changed by bballizlife

  • docneeded set to 1.
Download in other formats: Comma-delimited Text Tab-delimited Text RSS Feed