Envio correo electronico

Dispongo de 4 tablas: una productos, otra ventas, otra ordenes de pedidos y proveedores. Cuando se inserta una venta hay que actualizar el stock en la tabla productos y si el stock se encuentra por debajo de un cierto numero se envía automáticamente un correo a dicho proveedor.
Creo que para enviar dicho correo hay que utilizar "dbms_mail" pero no se como hacerlo.

1 respuesta

Respuesta
1
Por ejemplo, un procedimiento que he usado yo es el siguiente, que podría servirte para las versiones de Oracle a partir de la 8.1.6.
PROCEDURE ENVIA_MAIL (FGRABACION DATE,MAIL_DEST VARCHAR2) IS
origen varchar2(50);
destino varchar2(50);
asunto varchar2(50);
mensaje varchar2(1000);
crlf varchar2(2):= chr(13)||chr(10);
mailhost VARCHAR2(30) := 'smtp.tuempresa.es';
mail_conn utl_smtp.connection;
resp utl_smtp.reply;
BEGIN
origen:='[email protected]';
destino:=MAIL_DEST;
--NOTA EL ORIGEN DEBE SER UNA DIRECCION EXISTENTE DESDE LA @ A LA DERECHA
asunto:='Stock por Debajo del mínimo';
mensaje:='Con fecha '||fgrabacion||crlf;
mail_conn := utl_smtp.open_connection(mailhost, 25);
resp := utl_smtp.helo( mail_conn, mailhost);
resp := utl_smtp.mail( mail_conn, origen);
resp := utl_smtp.rcpt( mail_conn, destino);
resp := utl_smtp.data( mail_conn, mensaje );
resp := utl_smtp.quit( mail_conn );
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
Más o menos sería así.
La version que utilizo es la 9i.
Al utilizar el procedimiento que me has enviado me sale el siguiente error:
ORA-29278: error transitorio de SMTP: 421 Service not available
Gracias,
Un saludo
¿Qué versión de Oracle tienes? Lo digo porque dependiendo de eso, tienes también varias opciones.
El error significa que tu host que utilizas no está ejetuando un servicio smtp en el puerto indicado (25 en este caso).
Si en tu red no tienes un servidor de smtp, efectivamente no podrás enviar un mail
desde tu red. Pregunta al administrador de tu red cual es el nombre correcto del host y el
número de puerto para enviar un mail sobre SMTP en tu servidor. Si no tuvieses instalado ningún mail server, puedes mirar a ver si te puedes instalar uno gratuito (de esos temas no tengo mucha experiencia, de todas maneras) en tu servidor. Te paso dos gratuitos:
Windows:
http://argosoft-mail-server.softonic.com/ie/19129
unix:
http://www.sendmail.org/
Quizás tengas bloqueado el puerto 25 por algún firewall, aunque no creo...
Para tener bien configurado el servidor virtual, si no lo tuvieses, prueba en esta web:
http://www.codeproject.com/Purgatory/ConfigServerSmtp.asp
Prueba a hacer un telnet al nombre de smtp por el puerto 25.
En esta web te indican como realizar la prueba para comprobar que te funciona correctamente.
http://support.microsoft.com/kb/153119/es
En principio, si tienes en tu servidor de Oracle el IIS con el smtp bien configurado, funcionando y has puesto como parámetros el nombre smtp bien, la verdad, no se me ocurren muchas más soluciones.
E exo todo lo que me has indicado arriba, y el servidor SMTP funciona bien.
Te pongo el código que me mandaste al principio por si e copiado o puesto algo mal.
create or replace procedure enviar_email (fgrabacion in date,v_destino in varchar2)
is
origen varchar2(50);
destino varchar2(50);
asunto varchar2(50);
mensaje varchar2(1000);
crlf varchar2(2):= chr(13)||chr(10);
mailhost varchar(30) :='smtp.localhost.es';
mail_conn utl_smtp.connection;
resp utl_smtp.reply;
begin
origen:='@localhost.es';
destino:=v_destino;
--NOTA EL ORIGEN DEBE SER UNA DIRECCION EXISTENTE DESDE LA @ A LA DERECHA
asunto:='Stock por debajo del mínimo';
mensaje:='Con fecha '||fgrabacion||crlf;
mail_conn := utl_smtp.open_connection(mailhost, 25);
resp := utl_smtp.helo( mail_conn, mailhost);
resp := utl_smtp.mail( mail_conn, origen);
resp := utl_smtp.rcpt( mail_conn, destino);
resp := utl_smtp.data( mail_conn, mensaje );
resp := utl_smtp.quit( mail_conn );
exception
when others then
raise;
end;
Más cositas, si realizas lo que te comentaba:
c:>Telnet localhost 25
Y despues :
Heló
Quit
¿Qué te sale?
De todas maneras, para configurar bien el SMTP del IIS en una red, tenemos que hacer varias cosas:
La primera es configurar el firewall:
Si está instalado como parte del Service Pack 2 del windows XP, necesitamos permitir el tráfico
a través de él.
Abre el panel de control y selecciona el centro de seguridad. Si está desactivado, sáltate lo que sigue.
Si lo está, haz click en el "Firewall de windows". En la pestaña 'Excepciones', click en 'Añadir puerto'.
En el nombre, porn "SMTP" y el número de puerto "25".
También marqua el radio button TCP.
El ámbito de esta excepción debería ser para todas las computadoras por defecto.
Ahora habría que configurar el SMTP desde la consola del IIS.
Al menos, necesitamos configurar las "Relay Restrictions" para que las computadoras de la red local
puedan utilizar este servidor virtual de correo para enviar mails. En este ejemplo,
simplemente dejamos que todas las computadoras puedan enviar mails a través de este server.
Para configurar el SMTP, vamos a Inicio/programas/herramientas Administrativas/Servicios de Internet Information Services.
Verás todos los servicios IIS que se están ejecutando en tu máquina incluido el servidor SMTP
y el FTP server (si elegiste instalarlo con el IIS).
En el árbol, click derecho en el item "Servidor virtual SMTP predeterminado", y dale a "Propiedades".
Pincha en la pestaña "Acceso". Ahora, selecciona el botón de "Retransmisión" bajo "Restricciones de Retransmisión".
Por defecto, está seleccionado "Sólo los de la lista siguiente".
Como queremos que todos tengan acceso, pinchamos en Todos excepto los de la lista siguiente y click en "OK".
Después de este cambio, hace falta reiniciar el servidor SMTP desde la consola principal del IIS
DEspués, click derecho otra vez en "Servidor virtual SMTP predeterminado" y seleccionar "detener".
De nuevo click derecho y seleccionar "iniciar".
Trabajo en localhost, el puerto 25 lo tengo abierto y tengo instalado el smtp que trae el IIS.
¿Tengo qué acer algo más?
Un saludo.
En la bandeja de no deseado no aparece, pero bueno ya con lo que ace me sobra.
De nuevo gracias
Un millón de gracias!
Ya funciona.
El unico incoveniente es q a los correos hotmail no los envia.
Gracias de nuevo,
Un saludo
¡Me alegro de que ya te funcione! Que raro que no te funcione al enviarlo a una dirección hotmail. Mira en la carpeta de correo electrónico no deseado de hotmail, por si acaso.
Acuérdate de puntuar la pregunta.
se me ocurre que en el origen pongas una dirección, aunque no exista, a la izquierda de la @, por ejemplo, origen:='[email protected]'
También puedes probar con el nombre del mailhost. Si has hecho un telnet sólo a localhost y te ha salido, tu nombre de host es sólo localhost. Prueba a poner sólo:
mailhost VARCHAR2(30):='localhost';
O 'localhost. Es'...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas