Layer 06

Oralce – Inviare una mail da procedure

Connect as SYS User. Run %ORACLE_HOME/javavm/plsql/jlib/initjvm.sql Run %ORACLE_HOME/rdbms/java/install/initplsj.sql Secondo passo : creazione della procedura che utilizza il package UTL_SMTP CREATE OR REPLACE PROCEDURE SPEDISCI_MAIL ( Mittente IN VARCHAR2, Destinatario IN VARCHAR2, Oggetto IN VARCHAR2, Messaggio IN VARCHAR2 ) IS -- dichiarazione di una variabile a cui assegnare il nome del server SMTP utilizzato -- in questo esempio l'SMTP è quello di yahoo mailhost VARCHAR2(30) := smtp.mail.yahoo.it'; -- dichiarazione di una variabile di tipo utl_smtp.connection -- a cui verrà assegnato l'SMTP ed il numero di porta (25) conn utl_smtp.connection; crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 ); mesg VARCHAR2( 1000 ); local_mittente VARCHAR2(2000) := mittente; BEGIN -- Apertura di una connessione al server conn := utl_smtp.open_connection (mailhost,25); -- Assegnazione alla variabile mesg dell'intestazione della mail mesg:='Date:'||TO_CHAR(SYSDATE,'dd mon yy hh24:mi:ss')||crlf|| 'From:<'||mittente||'>'||crlf|| 'Subject:'||Oggetto||crlf|| 'To:'||destinatario||crlf||'' ||crlf||messaggio; -- Apertura di un collegamento al server utl_smtp.helo(conn, mailhost); -- Inizio di una transazione di posta con il server passandogli il mittente utl_smtp.mail(conn,local_mittente); -- il destinatario utl_smtp.rcpt(conn,destinatario); -- ed il testo del messaggio utl_smtp.data(conn, mesg); -- Chiusura della connessione utl_smtp.quit(conn); END; Come esempio, per eseguire la procedura possiamo passargli come parametri : Mittente : mario.rossi@yahoo.it Destinatario : rossi_mario@yahoo.it Oggetto del messaggio : Prova Email; Messaggio : Prova E-Mail con il package UTL_SMTP . BEGIN SPEDISCI_MAIL ('mario.rossi@yahoo.it', 'rossi.mario@yahoo.it', 'Prova Email', 'Prova E-Mail con il package UTL_SMTP'); END; Diamo ora un breve cenno sul server SMTP (Simple Mail Transfer Protocol). E’ un server destinato all’invio della posta e per comunicare con esso ci si deve collegare alla porta 25, riservata appunto al protocollo SMTP. Per capirne meglio il funzionamento, spieghiamo ora alcune caratteristiche di questo package, ed in particolare quelle procedure e funzione usate dalla procedura Spedisci_Mail. A-utl_smtp.connection : E’ un datatype Record che rappresenta il tipo di connessione SMTP. La sintassi è la seguente: TYPE connection IS RECORD ( host VARCHAR2(255), -- nome dell'host remoto port PLS_INTEGER, -- nome della porta remota private_tcp_con utl_tcp.connection, -- variabile privata private_state PLS_INTEGER -- variabile privata ); Host : nome dell’Host remoto dopo aver stabilito il collegamento. La variabile non e’ valorizzata se non e’ stata stabilita una connessione. Port : numero della porta del server SMTP a cui ci si è collegati. La variabile non e’ valorizzata se non e’ stata stabilita una connessione. Private_tcp_con : variabile riservata. Gli utenti non dovrebbero modificare questo campo. B-utl_smtp.open_connection: Apre un collegamento al server SMTP. FUNCTION 0pen_connection ( host IN VARCHAR2, port IN PLS_INTEGER DEFAULT 25 ) return connection; Quando il collegamento è stato stabilito, la procedura restituisce una variabile di tipo record e controlla il codice di risposta (la risposta attesa è un messaggio che inizia con il codice 220). C-utl_smtp.helo : Effettua l’handshaking iniziale con il server SMTP dopo il collegamento. PROCEDURE helo ( c IN OUT NOCOPY connection, domain IN VARCHAR2 DEFAULT NULL ); Domain: indica il nome del dominio del client locale, ed è usata per scopi di identificazione. Questa procedura esegue l’identificazione dell’utente . Prima di chiamare questa procedura il collegamento deve essere aperto tramite l’utilizzo della procedura open_connection(). La risposta attesa è un messaggio che inizia con il codice 250. D- utl_smtp.mail : Inizia una transazione della posta con il server. La destinazione è una Mailbox. PROCEDURE mail ( c IN OUT NOCOPY connection, sender IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL ); Sender : questa variabile indica l’indirizzo email dell’ utente. Questo comando non trasmette il messaggio, ma ne comincia semplicemente la preparazione. Deve essere seguito dalle chiamate a rcpt() ed a data() per completare la transazione. Il collegamento al server SMTP deve essere stato aperto ed il comando helo() deve essere stato trasmesso. E- utl_smtp.rcpt : Specifica il destinatario dell’ email. PROCEDURE rcpt ( c IN OUT NOCOPY connection, recipient IN VARCHAR2, parameters IN VARCHAR2 DEFAULT NULL ); Recipient : L’email del destinatario del messaggio. E’ possibile spedire una mail a più destinatari contemporaneamente.E’ sufficiente inserire, nella stringa passata a questa procedura, tra un indirizzo e l’altro, il punto e virgola . F- utl_smtp.data : Specifica il contenuto del messaggio. PROCEDURE data ( c IN OUT NOCOPY connection, body IN VARCHAR2 ); Body : testo vero è proprio del messaggio. La procedura data() deve essere chiamata soltanto dopo l’esecuzione delle procedure open_connection(), helo(), mail() ed rcpt(). Il collegamento al server SMTP deve essere stato aperto ed una transazione di posta deve essere stata attivata quando viene chiamata questa procedura. G- utl_smtp.quit : Termina la sessione e disconnette dal server. PROCEDURE quit ( c IN OUT NOCOPY connection ); La procedura quit() informa il server SMTP dell’intenzione dell’utente di terminare la sessione. Chiude il collegamento stabilito da open_connection(). Se una transazione di posta è attiva mentre viene eseguita la procedura quit(), questa viene terminata.]]>

Nessun commento “Oralce – Inviare una mail da procedure”