2017-11-09 1 views
2

Ich habe die folgende Prozedur, die ich aus dem Internet empfangenE-Mail schicken über PL/SQL-Skript

CREATE OR REPLACE PROCEDURE send_email (
p_sender IN VARCHAR2, 
p_recipient IN VARCHAR2, 
p_message IN VARCHAR2 
) 
AS 
mailcon UTL_SMTP.connection; 
BEGIN 
mailcon := UTL_SMTP.open_connection ('localhost'); 
UTL_SMTP.helo (mailcon, 'localhost'); 
UTL_SMTP.mail (mailcon, p_sender); 
UTL_SMTP.rcpt (mailcon, p_recipient); 
UTL_SMTP.DATA (mailcon, 
'From: ' 
|| p_sender 
|| UTL_TCP.crlf 
|| 'To: ' 
|| p_recipient 
|| UTL_TCP.crlf 
|| 'Subject: SMS From Database' 
|| UTL_TCP.crlf 
|| p_message 
); 
UTL_SMTP.quit (mailcon); 
END; 

Dieses Verfahren erfolgreich kompiliert wird. Während die Prozedur ausgeführt

exec SEND_email('[email protected]', '[email protected]','My first EMAIL'); 

ich die folgende Fehlermeldung

FEHLER in Zeile 1 erhalten:

ORA-29279: SMTP permanent error: 554 Can not connect to e-mail server. Error:100502 
ORA-06512: at "SYS.UTL_SMTP", line 17 
ORA-06512: at "SYS.UTL_SMTP", line 98 
ORA-06512: at "SYS.UTL_SMTP", line 138 
ORA-06512: at "PERFECT.SEND_SMS", line 9 
ORA-06512: at line 1 

Bitte helfen

+2

Sind Sie sicher, dass ein Mail-Server lokal ausgeführt wird (z. B. 'localhost')? Schaffst du es, einfache E-Mails zu senden? –

+0

@J.Chomel ja its in Lokaler Server – Abhijith

+1

Mischen Sie "SMS" mit "E-Mail"? –

Antwort

0

-Test zunächst erste

Testen Sie, ob Ihr SMTP-Server funktioniert. Sie brauchen Dienstprogramm (oder ähnlich, nc netcat kann auch funktionieren) dafür.

ip-172-31-3-158:~$ telnet localhost 25 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
220 ip-172-31-3-158.eu-west-1.compute.internal ESMTP Exim 4.86_2 Ubuntu Thu, 09 Nov 2017 10:55:59 +0000 
MAIL FROM: [email protected] 
250 OK 
RCPT TO: [email protected] 
250 Accepted 
DATA 
354 Enter message, ending with "." on a line by itself 
From: [email protected] 
To: [email protected] 
Subject: SMS From Database 

message body 
. 
250 OK id=1eCkVW-00018X-Ak 
QUIT 
221 ip-172-31-3-158.eu-west-1.compute.internal closing connection 
Connection closed by foreign host. 
ip-172-31-3-158:~$ 

Prüfen Sie dann, ob Sie 250 OK erhalten und schließlich, wenn Sie Ihre Nachricht an Ziel-E-Mail eintrifft.

Warum es

versagt Bitte beachten Sie senden durch localhost eine E-Mail selbst als von gmail.com Konto Werbung. Am wahrscheinlichsten wird es ein Problem sein, weil Ihr localhost SMTP-Server nicht berechtigt ist, E-Mails als gmail.com zu senden. Die E-Mail wird möglicherweise sofort abgelehnt oder in die Warteschlange gestellt und schließlich gelöscht.

Es bedeutet also, das Paar: SMTP-Server und Mail-Domäne, sind wichtig. Verwenden Sie smtp.gmail.com zum Senden als [email protected] und verwenden Sie smtp.acme.org zum Senden als [email protected]. Dieser Mechanismus soll verhindern, dass E-Mail-Adressen gefälscht werden. Diese Aussage ist eine Art Vereinfachung, aber Sie bekommen die Idee.

Jemand Google

Was müssen Sie als Google-Nutzer senden tun? Stellen Sie eine Verbindung zum Google SMTP-Server selbst her (Port 25 funktioniert nicht, SSL-Verbindung ist erforderlich zu smtp.gmail.com:465), authentifizieren Sie sich und senden Sie eine E-Mail. Testen Sie es zuerst mit dem rohen SMTP-Protokoll. Es ist komplizierter als es auf den ersten Blick aussieht - extra db Setup ist erforderlich, um externes SMTP zu erreichen (nicht localhost) und SSL könnte ein Problem für Oracle sein. Suchen Sie unten nach praktischerer Lösung.

praktische Lösung

Ein andere, bessere Option ist, die E-Mail von Ihrer Organisation SMTP-Server (oder auch Ihre localhost) mit Ihrer SMTP-Domäne in der E-Mail-Adresse zu senden. In der Regel ermöglicht die Organisation das Senden von E-Mails ohne Authentifizierung von Clients innerhalb des IP-Adressbereichs der Organisation. So

assumming Sie mit dem localhost bleiben wollen, nur bieten die echte E-Mail-Adresse (vorausgesetzt, Sie sind acme.org und die Datenbank läuft von oracle Benutzer verwenden from: [email protected]). "Teste es zuerst" - wenn es mit Telnet funktioniert und die E-Mail geliefert wird, dann konzentriere dich auf den PLSQL-Teil.

Verwandte Themen