2016-11-17 2 views
0

У меня есть постфиксная служба на моем Linux Linux, и они хорошо работают. Я использую функциюОтправить письмо от Oracle 12c с postfix на Oracle Linux 7

create or replace procedure Send_Mail(Msg_To varchar2, Msg_Subject varchar2, Msg_Text varchar2) is 
    c  Utl_Smtp.Connection; 
    Rc  integer; 
    Msg_From varchar2(50) := '[email protected]'; -- email of my company which hosted on Gmail 
    Mailhost varchar2(30) := 'smtp.gmail.com'; 

begin 
    c := Utl_Smtp.Open_Connection(Mailhost, 587); 
    Utl_Smtp.Helo(c, Mailhost); 
    Utl_Smtp.StartTLS(c); 
    Utl_Smtp.Mail(c, Msg_From); 
    Utl_Smtp.Rcpt(c, Msg_To); 

    Utl_Smtp.Data(c, 
        'From: Oracle Database' || Utl_Tcp.Crlf || 'To: ' || Msg_To || Utl_Tcp.Crlf || 'Subject: ' || Msg_Subject || Utl_Tcp.Crlf || 
        Msg_Text); 
    Utl_Smtp.Quit(c); 

exception 
    when Utl_Smtp.Invalid_Operation then 
     Dbms_Output.Put_Line(' Invalid Operation in Mail attempt 
using UTL_SMTP.'); 
    when Utl_Smtp.Transient_Error then 
     Dbms_Output.Put_Line(' Temporary e-mail issue - try again'); 
    when Utl_Smtp.Permanent_Error then 
     Dbms_Output.Put_Line(' Permanent Error Encountered.'); 
end; 

, который я нашел на http://www.dba-oracle.com/t_utl_smtp_utility.htm

когда я запускаю функцию

BEGIN 
send_mail(msg_to  => '[email protected]', 
      msg_subject => 'Test subject', 
      msg_text => 'Test text'); 
END; 

Я получаю сообщение об ошибке:

ORA-29279: SMTP permanent error: 530 5.7.0 Must issue a STARTTLS command first. im3sm2477330wjb.13 - gsmtp /* 132/5 selected symbols */ 

, что я сделал неправильно или что я должен сделать?

ответ

1

Ошибка упоминается в документации, которая также сообщает вам how to secure the SMTP connection using SSL/TLS. Вам необходимо позвонить utl_smtp.starttls().

... 
begin 
    c := Utl_Smtp.Open_Connection(Mailhost, 587); 
    Utl_Smtp.Ehlo(c, Mailhost); 
    Utl_Smtp.StartTLS(c); 
    Utl_Smtp.Ehlo(c, Mailhost); 
    Utl_Smtp.Mail(c, Msg_From); 
    Utl_Smtp.Rcpt(c, Msg_To); 
    ... 
+0

Спасибо, @AlexPoole, но теперь это ORA-29279: постоянная ошибка SMTP: 503 5.5.1 EHLO/HELO. r7sm3173844wjp.43 - gsmtp – a1b0r

+0

Итак, сначала сделайте вызов «ehlo». Документы также говорят, что вам нужно переиздать это позже, хотя их пример не соответствует. Возможно, вам нужно будет предоставить больше аргументов для вызова 'open_connection', как показано в документах. –

+0

Я переписываю код, о котором идет речь, и теперь у меня есть PLS-00905: объект SYS.SEND_MAIL недействителен/*; = # 59 */ – a1b0r