Newsgroup: it.comp.lang.perl
Titolo: Invio email con SMTP

Premetto che sono alle prime armi di perl, e che vorrei creare un modulo per
l'invio di una mail attraverso il server smtp della mia posta elettronica.
Che codice dovrei scrivere? Se può esservi utile guardando su cPanel del mio
server risultano istallati i seguenti moduli Perl:
Net::SMTP
Mail::Mailer::smtp
Ho provato a guardare il modulo SMTP ma ho dei problemi nella funzione
SMTP_aut('utente','passwd')


Guarda gli esempi forniti con Perl for System Administration
http://www.oreilly.com/catalog/perlsysadm/
I sorgenti del libro sono qui
http://examples.oreilly.com/perlsysadm/PSA-code.tar.gz
Vedi il capitolo 8, che ha un esempio chiarissimo sull'uso di Mail::Mailer.
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

';
    $smtp->to($to);
    $smtp->data();
    $smtp->datasend("To: $to\n");
    $smtp->datasend("\n");
    $smtp->datasend("Prova messaggio di testo\n");
    $smtp->dataend();    $
    smtp->quit;
Però lo script non mi da nessun errore, ma nemmeno mi invia l'email?
Qualcuno sa dirmi il perche?

SMTP_aut('utente','passwd')
Problemi di che tipo? La sintassi è elementare, quindi non credo sia
questo. Che cosa risponde il server (prova a impostare il debug)?
Potrebbe essere anche il server a non supportare l'autenticazione, o
non supportare nessun meccanismo di autenticazione disponibile tramite
Authen::SASL.
Ciao.

 
[SNIP]
L'esempio citato usa implicitamente Net::SMTP. Modificalo in modo che 
usi il server che vuoi, e provalo.
#*
#* sending mail using Mail::Mailer
#*
use Mail::Mailer;
$from="me\@
example.com
";
$to="you\@
example.com
";
$subject="Hi there";
$body="message body\n";
$type="smtp";
$server="
mail.example.com
";
my $mailer = Mail::Mailer->new($type, Server => $server) or
   die "Unable to create new mailer object:$!\n";
$mailer->open({From => $from,
                To => $to,
                Subject => $subject}) or
   die "Unable to populate mailer object:$!\n";
print $mailer $body;
$mailer->close;


 l'invio di una mail 
prima devo farti una domanda...su che server/piattaforma stai... stai in 
locale o remoto?
non capisco cosa ti fa preferire smtp al posto di sendmail...caso mai ti 
trovassi su windows in locale vai subito qua: 
http://www.indigostar.com/sendmail.htm
-- 
Visitate Il Mio Sito: 
http://southpark.altervista.org
E Salvate Futurama: 
http://www.petitiononline.com/bbf_2004/petition.html

usi il server che vuoi, e provalo.
E quale sarebbe il vantaggio rispetto ad usare direttamente Net::SMTP, a
parte il fatto di non poter autenticarsi presso il server, che è la cosa
che esplicitamente chiedeva l'OP?
Se proprio si vuole suggerire l'uso di un altro modulo, mi pare che
Mail::Sender potrebbe essere più giustificato: è autonomo rispetto a
Net::SMTP e dovrebbe incontrare maggiormente le esigenze espresse.
Ciao.

Cercherò di rispondere un po a tutti:
- Voglio usare SMTP proprio per l'autenticazione al server, quindi l'esempio
datomi non mi può essere utile
- Il modulo Mail::Sender non è presente nel mio server, altrimenti avevo
trovato uno script che faceva al caso mio
- Voglio collegarmi al mio server in modo tale che sul Return-path
dell'email inviata sia presente il mio indirizzo email, altrimenti se
l'invio con il mail classico viene impostato il nome del server dove è
ospitato il sito e cosi facendo alcuni provieder la considerano una email
spam
Cosa posso fare ragazzi?!?
Intanto ringrazio tutti per le risposte

Scrivo qui di seguito anche lo script e i rlativi errori segnalati:
#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
use strict;
use warnings;
use CGI::Carp "fatalsToBrowser";
use diagnostics;
    use Net::SMTP;
my $smtp = Net::SMTP->new('
mail.host.net
', Hello => hostfqdn(),Timeout =>
50);
    $user= "utente"; $password= "pass";
    $smtp->auth($user,$password);
    $mittente='"from"@
host.net
';
    $smtp->mail($mittente);
    $to='"to"@
libero.it
';
    # inizia la sessione di invio dati
        $smtp->data();
        $smtp->datasend("From: $mittente\n");
        $smtp->datasend("To: $to\n");
        $smtp->datasend("Subject: Prova\n");
        $smtp->datasend("Mime-Version: 1.0\n");
        $smtp->datasend('Content-Type: text/plain;
charset="us-ascii"'."\n");
        $smtp->datasend("Content-Transfer-Encoding: quoted-printable\n");
        $smtp->datasend("Testo di prova dell'email/n");
        # chiude la sessione di invio dati
        $smtp->dataend();
      # chiude la sessione con l'smtp server
      $smtp->quit;
Software error:
Global symbol "$user" requires explicit package name at sms.cgi line 12.
Global symbol "$password" requires explicit package name at sms.cgi line 12.
Global symbol "$user" requires explicit package name at sms.cgi line 13.
Global symbol "$password" requires explicit package name at sms.cgi line 13.
Global symbol "$mittente" requires explicit package name at sms.cgi line 14.
Global symbol "$mittente" requires explicit package name at sms.cgi line 15.
Global symbol "$to" requires explicit package name at sms.cgi line 16.
Global symbol "$mittente" requires explicit package name at sms.cgi line 19.
Global symbol "$to" requires explicit package name at sms.cgi line 20.
Execution of sms.cgi aborted due to compilation errors.
For help, please send mail to the webmaster (
webm...@latrave.h3nt.net
),
giving this error message and the time and date of the error.

Adesso lo script girą alla perfezione, nessun errore, ma l'email non
arriva!!!!!!!!!!!
Perchč?
#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
use strict;
use warnings;
use CGI::Carp "fatalsToBrowser";
use diagnostics;
    use Net::SMTP;
my $smtp = Net::SMTP->new('
mail.latrave.h3nt.net
',Timeout => 50);
    $smtp->auth('user','host');
    $smtp->mail('user\@
host.net
');
    # inizia la sessione di invio dati
        $smtp->data();
        $smtp->datasend("From: user\@
host.net
\n");
        $smtp->datasend("To: to\@
libero.it
\n");


 wrote:

$smtp->mail('
us...@host.net
');
tra '' singoli non c'č bisogno di fare \@