PDA

Visualizza la versione completa : Invio email con SMTP


andre82
02-10-2004, 15:11
Premetto che sono alle prime armi di cgi, e che vorrei creare un modulo per l'invio di una mail da pagina web collegandosi 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
inoltre la Path to sendmail è /usr/sbin/sendmail

Grazie

shishii
03-10-2004, 19:34
Non ho capito bene cosa ti serve.

Se devi fare inviare posta tramite un form del tuo sito guarda FormMail.pl su cui trovi un tutorial nel mio sito.

andre82
04-10-2004, 14:23
Devo costruire uno script che ricavi da un form un indirizzo email e un testo...dopodiche si colleghi al mio account di posta elettronica(es. mail.libero.it) con i miei dati utenti(nome password)ed invii il testo inserito nel form all'email indicata.
Quali sono le funzioni da mettere nelle procedure perl?

shishii
04-10-2004, 17:35
devi usare il modulo Net::SMTP che trovi su http://search.cpan.org

li trovi anche spiegazioni dettagliate.

Comunque tieni presente che ad esempio proprio con libero non ci riusciresti, in quanto non consente di inviare posta se non sei collegato con una loro connessione, e non credo che il tuo server sia così.

andre82
04-10-2004, 18:39
Grazie shishii, il mio era solo un esempio, non ho nessuna intenzione di provare a collegarmi al server libero.

Do un'occhiata al cpan e spero di capire qualcosa visto che non ho mai programmato in Perl.
Qualcuno ha mai fatto qualcosa simile a quello che devo fare e sa darmi delle indicazioni?

shishii
04-10-2004, 18:59
ad esempio:



use Net::SMTP;

$smtp = Net::SMTP->new('indirizzo_server_smtp');

$smtp->mail('utente');
$smtp->to('destinatario');

$smtp->data();
$smtp->datasend("To: destinatario\n");
$smtp->datasend("\n");
$smtp->datasend("Subject: oggetto\n");
$smtp->datasend("testo\n");
$smtp->dataend();

$smtp->quit;

andre82
05-10-2004, 14:49
Grazie mille, il codice e' molto chiaro e l'ho capito...solo mi chiedevo dove fosse inserita la password....

shishii
05-10-2004, 17:27
nella documentazione allegata al modulo c'è indicata la funzione da usare per autenticarsi su server smtp che ne necessitano.

andre82
07-10-2004, 21:53
Ho provato a seguire i tuoi consigli ed ho costruito il seguente codice:

#!/usr/bin/perl

use Net::SMTP;

$smtp = Net::SMTP->new(
Host => 'mailhost',
Hello => 'mail.host.net'
);
$smtp->auth ( 'user', 'passwd' );


$smtp->mail('usere');
$smtp->to('destinatario@host.net');

$smtp->data();
$smtp->datasend("To: \destinatario@host.net\n");
$smtp->datasend("\n");
$smtp->datasend("Subject:\n");
$smtp->datasend("ciao\n");
$smtp->dataend();

$smtp->quit;

Questo script posto nella cartella cgi-bin del server viene richiamato da una semplicissima form:


<html>

<head>
<title></title>
</head>

<body>
<form action="cgi-bin/prova.cgi" method="post">
<input type="submit" name="invia" valuie="invia">
</body>

</html>

Dopodiche ho cambiato i permessi allo script impostandoli a 755, ma cliccando submit nel form il server mi restituisce il seguente errore:

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, webmaster@latrave.h3nt.net and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.


Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.


Qualcuno ha qualche idea di quale sia il problema?

Claudio Vituzzi
08-10-2004, 12:57
il tuo codice non restituisce niente al browser...

prova con:



print "content-type: text/html\n\n";


all'inizio o alla fine della pagina...

in più usa sempre queste direttive:



use strict;
use warnings;
use CGI::Carp "fatalsToBrowser";


e solo in fase di testing anche:



use diagnostics;


ci hai capito qualcosa??

Loading