Newsgroup: it.comp.lang.perl
Titolo: Spedire email tramite PERL

Salve a tutti,
questa che state leggendo è una email disperata: è figlia di una sfida,
forse impossibile, ma credo comunque realizzabile.
Ci sono due amici di vecchia data: uno esperto programmatore ASP, l'altro,
il mittente di questa email, fresco fresco programmatore Perl (che è stato
capace in una sola ora di creare un breve script Perl e interfacciarlo con
una pagina html: inseriti nome ed email, questi vengono salvati in un file
di testo insieme all'ora di iscrizione e non dite 'o per Bach' a me ma al
Perl!!!).
E' sorta subito una diatriba tra i due su quale fosse il linguaggio più
potente (ricordate da bambini a chi ce l'aveva più....forte il fischio !!!):
il risultato è che lui in 4 + 4 = 8 ha creato una pagina per inviare email,
io ho appena fatto fuori il monitor a furia di testate (e se dovesse trovare
errori in questa email, ora sapete il perchè).
Ho provato di tutto ma niente: le uniche conclusioni sono quanto riportate:
1 - il programma, a quanto pare, strafigo SENDMAIL è solo per server unix
2 - ci sono programmi per spedire email tramite server nt, ma non sono utili
perchè:
  a) sono a pagamento
  b) si deve contattare l'amministratore affinchè setti qualcosa
3 - qualcosa o qualcuno (ormai sento pure le voci) mi ha detto di usare o
Net::SMTP o Net::Socket
4 - l'alcool non affoga del tutto i problemi di programmazione (e nemmeno
quelli con le donne, purtroppo)
Ora se chi legge non si fosse già dato foco, gli evidenzio il semplice
problema:
si tratta di creare una pagina html con due campi: uno per il nome e uno per
l'email. Al click di 'Invia i dati', l'utente viene avvisato della
registrazione effettuata (e questo lo so fare, quindi Vi risparmio un sacco
di tempo), dicendogli che gli arriverà una email. Ora partono due email:
1 - una all'utente con un messaggio di conferma (il tipico di conferma che
troviamo in tutti le mailing list)
2 - un'altra a me che ha per testo il nome e l'indirizzo inserito.
Chiunque voglia darmi un aiuto su come si spediscono email di questo tipo
con il Perl, spedendomi link o file o consigli, sarà ricompensato ora con un
caloroso grazie (sembrerà poco, ma viene sincero).
Augurando, comunque, a tutti
Buona programmazione
Vi saluto e ci sentiamo alla prossima sfida, in fin dei conti la
programmazione non è altro che una continua sfida alle proprie capacità
logico - intuitive e detto questo, segno inconfondibile di una demenza
senile molto ma molto ma molto precoce, vi dico
Ciao,
Mkè

 wrote in message
7flQ5.60778$BF.21...@news.infostrada.it...


o Net::SMTP o Net::Socket
Cosě puoi mandare un'email:
use Net::SMTP;
# collegati al server
$smtp = Net::SMTP->new('tuo.server.SMTP'); # es. 
mail.tuo-provider.it
# spedisci un messaggio
$smtp->mail('
mitt...@dominio.com
');
$smtp->to('
destin...@dominio.com
');
$smtp->data();
$smtp->datasend('From: 
mitt...@dominio.com
\n');
$smtp->datasend('To: 
destin...@dominio.com
\n');
$smtp->datasend('Subject: oggetto del messaggio\n');
$smtp->datasend('\n'); # fine degli headers
$smtp->datasend($corpo_del_messaggio');
$smtp->dataend();
# se vuoi spedire altri messaggi, fallo qui
# chiudi il collegamento con il server
$smtp->quit();
-- 
Roberto Lupi
|[ Work:     
http://www.lupex.net/
 ]|
|[ Personal: 
http://www.lupi.ws/
   ]|
Vendesi Citroen BX 1600 Station Wagon, L. 1.800.000 --> 
http://www.lupi.ws/

Moore | Maya wrote:

Conosco abbastanza bene ASP poiché ho dovuto, mio malgrado, progettare uno
shopping cart proprietario sotto NT. Non è male, come linguaggio, anche se fa
vedere parecchio che è stato pensato come un linguaggio di scripting e basta,
mentre Perl ha una portata molto più ampia. Prova al tuo amico a chiedere che in
ASP, senza usare oggetti activeX, venga fatto l'upload di un file su un server
attraverso una form, oppure che in una form venga inserito un IP numerico, e
alla pressione della submit debba comparire una pagina con l'output di un "ping"
verso quell'ip: vedrai quante decine di linee di codice deve inventarsi :-)
ASP ha preso piede poiché basta Win 98 con PWS per giochicchiare destreggiandosi
tra html e database (!) Access. Inoltre "è ganzo" perché ti fa accedere
facilmente a database ed oggettini vari Microsoft, a patto di avere driver ODBC
vari. Peccato che da lì non ci si schioda: come vuoi fare qualcosa di più, ASP
fa vedere la corda. Ho un 486 a 66 con 24 Mb di Ram con Linux (e sendmail)
installati, server web apache, e perl 5.6 con decine di moduli installati, che
sta facendo faville. Chiedi al tuo amico con una macchina simile di fare le
stesse cose. Anzi, chiedigli di scrivere qualcosa in ASP sotto Linux ;-)
Tienti stretto il tuo Perl, e guarda pure con occhio dubbioso coloro che tessono
le lodi di ASP: "non ti curar di loro, ma guarda e passa" ;-)
   Ciao,
       Samuele
PS: Per la soluzione al tuo problema, puoi usare Net::SMTP (esempio tratto da
perldoc Net::SMTP)
           #!/usr/local/bin/perl -w
           use Net::SMTP;
           $smtp = Net::SMTP->new('mailhost');
           $smtp->mail($ENV{USER});
           $smtp->to('postmaster');
           $smtp->data();
           $smtp->datasend("To: postmaster\n");
           $smtp->datasend("\n");
           $smtp->datasend("A simple test message\n");
           $smtp->dataend();
           $smtp->quit()

$smtp->datasend($corpo_del_messaggio');
E` sbagliato. Le righe devono essere terminate da \r\n.
Usate i metodi ad alto livello forniti dal modulo.
-- 
ciao, | * The Internet is full. Go away.  -- Joel Furr *
Marco | (Ri)scoprire fidonet: 
http://bbs.mi.linux.it



Grazie, grazie molto, amici: la vostra cortesia e attenzione mi allieta e mi
fa sempre più comprendere il vero senso della comunità informatica, mille
facce ma una sola direzione !
Per quello che concerne le soluzioni che mi presentate, la mia risposta è:
CGI Error
The specified CGI application misbehaved by not returning a complete set of
HTTP headers. The headers it did return are:
Can't locate Net/SMTP.pm in @INC (@INC contains: c:/Perl/lib
c:/Perl/site/lib .) at D:\home\########\cgi-bin\prova.cgi line 1.
BEGIN failed--compilation aborted at D:\home\########\cgi-bin\prova.cgi line
1.
O per lo meno la risposta del server. Comprendo subito che non è una bella
cosa e non promette affatto nulla di buono. Deve supporre che mancando il
modulo Net::SMTP, non ci sia altro modo di spedire email... comunque ci ho
provato e grazie di nuovo.
Per quello che concerne i vostri commenti su l'ASP, effettivamente credo
abbiate ragione: non ho mai studiato un linguaggio di programmazione che non
mi abbia interessato. Ho scelto il Delphi e mi sono trovato in Paradiso, ho
scelto il BASM e non ho mai distrutto il processore, preferisco il VRML a
tanti esperimenti di linguaggi visuali per il 3D disponibili nella rete,
insomma il Perl mi sembra una validissima scelta (peccato che sia l'unico a
pensarla tra i miei amici).
Bene, di nuovo vi ringrazio e arrisentirci alla prossima.
Ciao,
Mkè



 le lodi di ASP: "non ti curar di loro, ma guarda e passa" ;-)
Eventualmente come alternativa all'ASP dai un'occhiatina a PHP, anche lui un
linguaggio di 'embedded scripting'. Un pastrocchione di C e Perl un po'
slegato, ma dotato di funzioni di data retrieving molto potenti. Implementa
direttamente e semplicemente l'accesso a dati sia in locale che da remoto,
si interfaccia direttamente con diversi tipi di database, e' modulare e
soprattutto e' opensource e multipiattaforma.
ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

 errori in questa email, ora sapete il perchč).
Scusami, questa "prova" decide solo qual e' il linguaggio piu' veloce per
fare le cazzatine, non qual e' quello piu' potente.
E sul piano della velocita' a fare cazzatine asp vincera' sempre. Salvo poi
magari che lo potrai utilizzare solo su server NT.
Digli di provare a fare qualcosa di piu' impegnativo, che so, un motore di
ricerca con spider che cataloghi automaticamente tutti i siti che trova, la
generazione di grafici basati sull'andamento della borsa, il calcolo delle
sillabe di una poesia, l'analisi di un log di un sito web al alto traffico,
cose cosi'.
bye
silvio

Usate i metodi ad alto livello forniti dal modulo.
a) Se il mio codice è errato allora e' sbagliata anche la documentazione di 
Net::SMTP fornita con la distribuzione della ActiveState[1] perche' l'ho 
seguita alla lettera, anche per i caratteri di fine riga.
b) Sono cosciente che a livello di protocollo SMTP il terminatore di riga e' 
\r\n, suppongo che il modulo si occupi della conversione visto che la sua 
documentazione prescrive di usarne uno differente.
c) Net::SMTP non ha metodi di livello piu' elevato da usare.
[1] perl -v
This is perl, v5.6.0 built for MSWin32-x86-multi-thread
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2000, Larry Wall
Binary build 618 provided by ActiveState Tool Corp. 
http://www.ActiveState.com
Built 21:03:54 Sep 13 2000
-- 
Roberto Lupi

che la sua documentazione prescrive di usarne uno differente.
Ho controllato. Il modulo si comporta come ho descritto sopra, come si
evince dalla documentazione e dal sorgente di Net::CMD da cui Net::SMTP
discendente: 
| datasend ( DATA )
|
| Send data to the remote server, converting LF to CRLF. Any line
| starting with a '.' will be prefixed with another '.'. DATA may be an
| array or a reference to an array. 
-- 
Roberto Lupi

c) Net::SMTP non ha metodi di livello piu' elevato da usare.
Puoi pero' usare Mail-tools per comporre e spedire i messaggi. Si appoggia
a sua volta a Net::SMTP per la spedizione, ma ha dei metodi per la
costruzione e la manipolazione di header e messaggi.
Ciao.