Oracle, invio mail con caratteri speciali

lunedì 01 ottobre 2012 - 10.42
Tag Elenco Tags  C#  |  .NET 3.5  |  Oracle 10g

volperubbia Profilo | Senior Member

Ciao tutti,
vorrei inviare una mail da pl/sql.

DECLARE
p_Address VARCHAR2(30) := '...';
p_Subject VARCHAR2(20) := 'Prova';
p_Message VARCHAR2(50) := 'Ciao, oggi è una bella giornata!';
v_CRLF VARCHAR2(10) := CHR(13) || CHR(10);
v_Mailhost VARCHAR2(30) := '...';
v_Sender VARCHAR2(30) := '...';
v_Username VARCHAR2(30) := '...';
v_Password VARCHAR2(30) := '...';
v_Port SMALLINT := 25;
v_Connection UTL_SMTP.CONNECTION;
BEGIN
v_Connection := UTL_SMTP.OPEN_CONNECTION(v_Mailhost, v_Port);
UTL_SMTP.COMMAND(v_Connection, 'AUTH LOGIN');
UTL_SMTP.COMMAND(v_Connection, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(v_Username))));
UTL_SMTP.COMMAND(v_Connection, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(v_Password))));
UTL_SMTP.MAIL(v_Connection, v_Sender);
UTL_SMTP.RCPT(v_Connection, p_Address);
UTL_SMTP.OPEN_DATA(v_Connection);
UTL_SMTP.WRITE_DATA(v_Connection, 'From: '|| v_Sender || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'Subject: '|| TRIM(p_Subject) || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'To: ' || p_Address || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, TRIM(p_Message) || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, v_CRLF);
UTL_SMTP.CLOSE_DATA(v_Connection);
UTL_SMTP.QUIT(v_Connection);
END;
/

Mi sono accorto però che con lo script precedente non gestisce le lettere accentate (immagino anche altri caratteri speciali). Manca qualcosa o sbaglio l'uso di UTL_SMTP?

Grazie per l'attenzione,
Davide

Aggiornamento:
ho risolto poi nel seguente modo ...

v_Connection := UTL_SMTP.OPEN_CONNECTION(v_Mailhost, v_Port);
UTL_SMTP.COMMAND(v_Connection, 'AUTH LOGIN');
UTL_SMTP.COMMAND(v_Connection, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(v_Username))));
UTL_SMTP.COMMAND(v_Connection, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(v_Password))));
UTL_SMTP.MAIL(v_Connection, v_Sender);
UTL_SMTP.RCPT(v_Connection, p_Address);
UTL_SMTP.OPEN_DATA(v_Connection);
UTL_SMTP.WRITE_DATA(v_Connection, 'From: '|| v_Sender || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'To: ' || p_Address || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'Subject: =?ISO-8859-15?Q?' || UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(TRIM(p_Subject)))) || '?=' || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'MIME-version: 1.0' || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'Content-Type: text/html;"charset=ISO-8859-15"' || v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, 'Content-Transfer-Encoding: quoted-printable '|| v_CRLF);
UTL_SMTP.WRITE_DATA(v_Connection, v_CRLF);
UTL_SMTP.WRITE_RAW_DATA(v_Connection, UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(REPLACE(REPLACE(TRIM(p_Message), v_CRLF, '<br />'), CHR(10), '<br />'))));
UTL_SMTP.CLOSE_DATA(v_Connection);
UTL_SMTP.QUIT(v_Connection);

Su Oracle 10.2 funziona, non so dirvi su altre versioni.
Ciao!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5