Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Enviar correo con caracteres raros desde procedimiento almacenado

Estas en el tema de Enviar correo con caracteres raros desde procedimiento almacenado en el foro de Oracle en Foros del Web. Hola. Tengo un procedimiento almacenado que envía un correo a una determinada dirección. El problema es que envía un texto plano en el que no ...
  #1 (permalink)  
Antiguo 23/06/2010, 06:58
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Enviar correo con caracteres raros desde procedimiento almacenado

Hola.

Tengo un procedimiento almacenado que envía un correo a una determinada dirección. El problema es que envía un texto plano en el que no se ven los símbolos (la ñ aparece como ?, si hay una vocal con tilde la tilde no aparece, etc.).

He tratado de corregirlo añadiendo esto antes del cuerpo de correo

-- Para permitir caracteres "raros" (tildes, simbolos, ...)
UTL_SMTP.write_data(mi_conexion,'mime-version: 1.0' || UTL_TCP.crlf);
UTL_SMTP.write_data(mi_conexion'content-type: text/plain; charset=iso-8859-1' || UTL_TCP.crlf);

Pero cuando compilo y lo vuelvo a ejecutar no funciona, y el correo se recibe con los mismos errores.

¿Alguien me podría ayudar a resolver este problema?
  #2 (permalink)  
Antiguo 24/06/2010, 01:01
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Enviar correo con caracteres raros desde procedimiento almacenado

Bueno, al final conseguí resolverlo cambiando algunas cosillas, como por ejemplo la ISO, que usé la 15 (aunque valía perfectamente la 1), añadí content transfer encoding de 8 bit a la cabecera, y luego modifiqué el body para usar una variable RAW, parseándola con:


myRawData := utl_raw.cast_to_raw(myBody);
UTL_smtp.write_raw_data(mi_conexion, myRawData);

Ahora sólo me queda un problemilla, que es el símbolo del Euro (€), que en la base de datos se guarda como un interrogante (?) y en java se recoge en valor hexadecimal, pero que para enviar el mail desde oracle aparece como un pequeño rectángulo vertical parecido a esto [], pero cerrado.

¿Alguien me sabría decir si hay alguna manera de visualizar correctamente el símbolo del Euro en el correo, haciendo alguna transformación?
  #3 (permalink)  
Antiguo 14/09/2010, 13:51
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Respuesta: Enviar correo con caracteres raros desde procedimiento almacenado

Hello amigo,

Estoy teniendo problemas para enviar un mail con caracateres especiales. como las tildes....

Sera que puedes explicar con mas detalle lo que realizaste para solvertar el problema?

Gracias y saludos....
  #4 (permalink)  
Antiguo 16/09/2010, 08:50
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: Enviar correo con caracteres raros desde procedimiento almacenado

Con esto te debería funcionar, al menos en oracle:

Cuando defines las variables que vayan a generar el cuerpo de correo hazlo así:

--Necesario para identificar la conexion
tu_conex_mail = UTL_SMTP.connection;

-- Variables para el cuerpo de correo en formato RAW (compondrá un cuerpo de correo de 5000 caracteres)
pBody VARCHAR2(5000);
varData RAW(5000);

Cuando escribas las cabeceras del correo (antes de generar el body):

-- Para permitir caracteres "especiales" (tildes, simbolos, ...)
UTL_smtp.write_data(tu_conex_mail, 'MIME-Version: ' || '1.0' || UTL_TCP.CRLF);
UTL_smtp.write_data(tu_conex_mail, 'Content-Type: ' || 'text/plain; charset=iso-8859-15' || UTL_TCP.CRLF);
UTL_smtp.write_data(tu_conex_mail, 'Content-Transfer-Encoding: ' || '8bit' || UTL_TCP.CRLF);
-- Deja un espacio para separar el cuerpo de la cabecera
UTL_SMTP.write_data(tu_conex_mail, UTL_TCP.CRLF);

Cuando acabes de escribir el body:

-- transforma el pBody en RAW y escribe el cuerpo del correo
varData := utl_raw.cast_to_raw(pBody);
UTL_smtp.write_raw_data(tu_conex_mail, varData);

UTL_SMTP.close_data(tu_conex_mail); -- Se cierra el buffer del correo

UTL_SMTP.quit(tu_conex_mail); -- Se cierra la conexión con el servidor de correo
  #5 (permalink)  
Antiguo 16/09/2010, 10:15
 
Fecha de Ingreso: marzo-2008
Mensajes: 3
Antigüedad: 16 años
Puntos: 0
Respuesta: Enviar correo con caracteres raros desde procedimiento almacenado

Muchisimas gracias por la ayuda Fuzzylog... Me ha funcionado perfectamente!

Etiquetas: caracteres, correo, enviar, procedimiento, raros, almacenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.