[résolu]Perl/CGI module manquant Mail::Sendmail quoi faire ?

Bonjour,
je découvre les joies de l’hébergement et aprés avoir développé un script sur mon serveur, je m’apercois qu’il ne tourne pas chez l’hebergeur, parce qu’il ne trouve pas Mail::Sendmail auquel je fais appel.
J’ai eu beau chercher dans l’interface d’admin de l’hébergeur, il ne semble pas qu’on puisse ajouter ses propres modules (ç’aurait été etonnant).
J’ai vaguement vu un fichier Formmail.pl impossible à lire par ftp) installé par défaut dans le cgi-bin de mon rep chez l’hebergeur, et en allant chercher sur le net, j’ai trouvé son code.
Je pourrais eventuellement reprendre la procedure d’envoi de mail (qui ne fait qu’une session standard d’envoi en ligne de commande avec sendmail), mais il y a peut être des modules tout faits plus “classiques” utilisés pour envoyer un mail en perl depuis un site hébergé, non ?
Voilà, si quelqu’un peu me dire comment ça se fait, je lui en serais redevable.

bonjour,
ton hégergeur n’a pas un support technique où quelqu’un pourrait t’expliquer si c’est possible de mettre ton module, ou comment utiliser un équivalent ?
c’est quoi l’hégergeur ?

Un gros hébergeur local flamand (je ne parle pas néerlandais), et nous ne somme pas un client suffisament important pour qu’ils rajoutent des modules perl pour nous.
J’ai browsé un peu l’interface d’admin et les tutos d’aide, et il semble qu’ils autorisent le script Formmail.pl, fourni en standard, à envoyer les résultats d’un formulaire. Comme ça ne me suffit pas et que je dois envoyer des mails plus complexe, j’ai décidé d’attaquer la commande sendmail en lui envoyant direct des infos d’envoi de mail comme le fait Formmail, en utilisant un script du genre:

[code]my $mailprog = ‘/usr/lib/sendmail -i -t’;
my $mailerr = ‘’;
sub send_mail {
my ($To,$From,$Bcc,$subject,$body) = @_;
open(MAIL,"|$mailprog");

faire ce que j’ai à faire

 close (MAIL);
return 1;

}[/code] Mais premier echec: si ‘/usr/lib/sendmail -i -t’ passe bien à l’ouverture de MAIL chez moi, chez l’hebergeur, j’ai un message d’erreur peu parlant.
Si j’essaye $mailprog = ‘/usr/lib/sendmail -i -t a@b.c’ par contre, ça a l’air de passer.

Maintenant, reste à savoir ce que ça fait.
J’ai un problême: je pense me souvenir ce que fait le open(MAIL,"|$mailprog"), et j’imagine bien à quoi peut ressembler la composition d’un mail, mais je ne sais pas comment récupèrer la sortie d’execution de $mailprog avec ce que je lui donne (les erreurs, quoi).
Fin bon, je continue mes tests.

Bon, ben je me répond: finalement, je pars sur cette base là qui marche est qui fait déjà ce que je veux:

[code]sub send_mail {
my ($To,$From,$Bcc,$subject,$body) = @_;
my $mailprog = “/usr/lib/sendmail -ti $To”;

open(MAIL,"|$mailprog");

print MAIL "To: $To\nFrom: $From\nBcc: $Bcc\nSubject: $subject\n\n";
close (MAIL);
return 1;

}[/code] Je vais bien sûr affiner ma gestion d’erreurs, mais j’aimerais bien récupèrer le statut de retour du sendmail d’une manière ou d’une autre (un “250 - OK mail sent”, quoi!).

ben je sais pas, et je connais pas perl, et sendmail heu , m’y suis pas encore sérieusement frotté (un vague souvenir de perte et fracas :smiley: ).
Donc en fait, tu testes un formulaire d’envoi de mail depuis ton poste sur ton site distant héberger ? (non je crois)
Où est /usr/lib/sendmail ? (enfin bref, j’ai pas d’idée)

sauf que pour récupérer le code de retour, ça peut-etre celui de la fonction non ?
où alors un truc qui pourrait t’interesser si faire une redirection d’url en fonction du retour de sub send_mail … Ou bien ya bien des logs quelquepart non ?
je suis tombé là-dessus aussi :
http://www.developpez.net/forums/showthread.php?t=74221

Tu veux faire quoi avec ton script perl? Tu ne peux pas passer directement avec php?

Je n’ai pas envie de mettre mon nez dans du php.
Comme je l’ai dit, l’essentiel de mon problême, qui était d’envoyer un mail sans utiliser Mail::Sendmail, a été résolu par le petit bout de code que j’ai donné plus haut (je vais aller corriger le titre).
Maintenant mon pb, c’est que si j’ai bien le mail qui part, je ne récupère pas les erreurs de la commande que j’execute. Mais c’est un classique en perl semble t il, et je suis en train de lire perldoc.perl.org/perlipc.html#Bi … munication qui en parle.

Je me répond encore plus:
comme il est dit dans perldoc.perl.org/IPC/Open3.html si on veut récupèrer la sortie standard séparément de la sortie d’erreur.

Voici le module que j’utilise :

#!/usr/bin/perl -w
use Mail::Mailer;

my $mailer = Mail::Mailer->new();
$mailer->open({
                From    => $from_address,
                To      => $dest_address,
                Subject => $subject." le ".$current,
                });
print $mailer "Mon message";
$mailer->close();

Cependant je ne sais pas si ce module est dispo chez ton hébergeur.

[quote=“themorice”]Voici le module que j’utilise :

[code]
#!/usr/bin/perl -w
use Mail::Mailer;

my $mailer = Mail::Mailer->new();
$mailer->open({
From => $from_address,
To => $dest_address,
Subject => $subject." le ".$current,
});
print $mailer “Mon message”;
$mailer->close();
[/code] Oui, c’est là le pb. Mais bon, la solution que j’ai trouvée d’attaquer directement sendmail est assez souple et complète si tu t’amuse à récupèrer stdout et stderr. J’ai essayé, et tu peux même faire du multipart, quand tu connais la syntaxe.

Cependant je ne sais pas si ce module est dispo chez ton hébergeur.[/quote]