Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2924 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Mail avec MIME::lite

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Perl] Mail avec MIME::lite

n°2129360
Titprem
Posté le 02-03-2012 à 13:39:08  profilanswer
 

Bonjour,
 
Je souhaite envoyer des mails dans un script Perl, réalisé avec MIME::lite.
 
Problème : les accents dans le titre du message sont remplacés par deux "XX". (Les accents dans le corps du message sont corrects.) Une idée pour résoudre le problème ?
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use MIME::Lite;
  5. if(1 && 1){
  6.    print("Envoi du mail...\n" );
  7.    my $msg = MIME::Lite->new(
  8.       From     => 'toto@tutu.fr',
  9.       To       => 'tutu@toto.fr',
  10.       Type     => 'text/plain; charset=UTF-8',
  11.       Subject  => "é à è ï ù ô ê",
  12.       Data     => "é à è ï ù ô ê"
  13.     );
  14.    if($msg->send){
  15.       print("Envoi du mail réussi !\n" );
  16.    } else {
  17.       print("échec de l'envoi du mail !\n" );
  18.    }
  19. }


 
Et j'obtiens :

Code :
  1. Sujet : XX XX XX XX XX XX XX
  2. De    : toto@tutu.fr
  3. Date  : 13:43
  4. Pour  : tutu@toto.fr
  5. Corps : é à è ï ù ô ê


Message édité par Titprem le 02-03-2012 à 13:51:13
mood
Publicité
Posté le 02-03-2012 à 13:39:08  profilanswer
 

n°2129363
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 13:51:42  profilanswer
 

Et avec
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use MIME::Lite;
  5. use Encode  qw(encode);
  6.  
  7.  
  8. if(1 && 1){
  9.   print("Envoi du mail...\n" );
  10.  
  11.   my $msg = MIME::Lite->new(
  12.      From     => 'toto@tutu.fr',
  13.      To       => 'tutu@toto.fr',
  14.      Type     => 'text/plain; charset=UTF-8',
  15.      Subject  => encode(“MIME-B”, "é à è ï ù ô ê" ),
  16.      Data     => "é à è ï ù ô ê"
  17.    );
  18.   if($msg->send){
  19.      print("Envoi du mail réussi !\n" );
  20.   } else {
  21.      print("échec de l'envoi du mail !\n" );
  22.   }
  23. }


ça donne quoi?
 
A+


Message édité par gilou le 02-03-2012 à 14:00:17

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129367
Titprem
Posté le 02-03-2012 à 13:58:54  profilanswer
 

"utf8::encode" n'accepte pas de modifier directement la variable.
 
En passant par des variables, j'ai "XXXX XXXX XXXX XXXX XXXX XXXX XXXX" pour le titre et "é à  Ã¨ ï ù ô ê" pour le corps...
 
(Mon source est en UTF8.)


Message édité par Titprem le 02-03-2012 à 14:00:03
n°2129368
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 13:59:53  profilanswer
 

Oui, je viens de modifier ma réponse au vu de ceci: http://www.databasesandlife.com/us [...] -mimelite/
Réessayes le code que j'ai modifié
Et si ça colle pas, met le sujet dans une variable (je sais pas si encode essaye de modifier en place la string ou pas, et si elle est pas dans une variable, elle sera pas modifiable)
A+,


Message édité par gilou le 02-03-2012 à 14:02:17

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129369
Titprem
Posté le 02-03-2012 à 14:01:56  profilanswer
 

C'est mieux : le corps est bon, et le sujet est : "é à  Ã¨ ï ù ô ê".
 
Il faudrait rajouter un ptit truc...

n°2129370
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 14:06:11  profilanswer
 

>> Mon source est en UTF8
 
Dans ce cas la, peut être qu'en mettant un use utf8; en tête (sans un no utf8; comme tout à l'heure) on réglera le pb.
En principe, use utf8; indique à Perl que le programme perl est en utf8.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129371
Titprem
Posté le 02-03-2012 à 14:09:20  profilanswer
 

Avec use utf8, le sujet est bon ! Mais le corps du message devient "� � � � � � �" et les retours de mon script s'affiche avec des caractères tout aussi étranges : "Envoi du mail r▒ussi !"
 
J'adore les problèmes d'encodage ! :D


Message édité par Titprem le 02-03-2012 à 14:09:58
n°2129372
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 14:10:45  profilanswer
 

Quoique non, tout bêtement, si ton source est en utf8, il suffit de faire  
Subject =>   "=?UTF-8?B?" ."é à è ï ù ô ê". "?=",
a priori.
Ça marche pas ça:
 

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use MIME::Lite;
  5.  
  6. if(1 && 1){
  7.   print("Envoi du mail...\n" );
  8.  
  9.   my $msg = MIME::Lite->new(
  10.      From     => 'toto@tutu.fr',
  11.      To       => 'tutu@toto.fr',
  12.      Type     => 'text/plain; charset=UTF-8',
  13.      Subject  => "=?UTF-8?B?" ."é à è ï ù ô ê". "?=",
  14.      Data     => "é à è ï ù ô ê"
  15.    );
  16.   if($msg->send){
  17.      print("Envoi du mail réussi !\n" );
  18.   } else {
  19.      print("échec de l'envoi du mail !\n" );
  20.   }
  21. }


A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129373
Titprem
Posté le 02-03-2012 à 14:14:45  profilanswer
 

Non, il me sort "=?UTF-8?B?XX XX XX XX XX XX XX?=" pour le sujet.
 
C'est peut-être lié au fait que mon client mail est un vieux Thunderbird aussi... (Mais ça, je ne peux pas le changer !)

n°2129375
Titprem
Posté le 02-03-2012 à 14:16:41  profilanswer
 

Avec :

Code :
  1. Subject  => encode("MIME-B", Encode::decode_utf8("é à è ï ù ô ê" )),

tout marche !
 
Merci gilou pour ton aide ! :jap:

mood
Publicité
Posté le 02-03-2012 à 14:16:41  profilanswer
 

n°2129377
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 14:22:01  profilanswer
 

Sinon, il semble qu'en fait la méthode usuelle (au vu de Google) soit:
use MIME::QuotedPrint qw(encode_qp);
...
my $encoded = encode_qp("é à è ï ù ô ê" );  
...
Subject  => "=?utf-8?Q?$encoded?=",
...
 
(et si la ligne suivante passe
Subject  => "=?utf-8?Q?". encode_qp("é à è ï ù ô ê" ) ."?=",
On peut éviter la variable $encoded intermédiaire)
 
A+,
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2129379
Titprem
Posté le 02-03-2012 à 14:24:16  profilanswer
 

J'étais aussi tombé dessus, mais ça ne marchait pas...
 
J'obtenais ça : "=?utf-8?Q?=C3=A9=C3=A9=C3=A9=C3=A9=C3=A9=C3=A9=C3=A9 =C3=A0=C3=A0=C3=A0=C3=A0=C3=A0= =C3=A0 =C3=AA=C3=AA=C3=AA=C3=AA= ?="


Message édité par Titprem le 02-03-2012 à 14:24:53
n°2129384
gilou
Modérateur
Modzilla
Posté le 02-03-2012 à 14:36:17  profilanswer
 


Bon de toute façon, l'essentiel c'est que ça marche maintenant.
 
A+,


Message édité par gilou le 02-03-2012 à 14:37:50

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [Perl] Mail avec MIME::lite

 

Sujets relatifs
[Perl] Script de transfert FTP[Perl] Can't call method "Open" on an undefined value
envoie de mail en phpScript Perl
Perl , Problème /Perl: afficher le résultat d'une requête sql
[PERL] supprimer unicode \\u0003[PERL] où trouver une version 5.6.1 de nos jours ?
envoi mail outloock via code macro excel[PHP Mail Mac] Configuration serveur mail
Plus de sujets relatifs à : [Perl] Mail avec MIME::lite


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR