繁体   English   中英

使用oracle linux 5.9在oracle 11g中发送电子邮件时出错

[英]error in sending email in oracle 11g with oracle linux 5.9

我的操作系统是oracle linux 5.9。我有一个使用utl_smtp软件包发送电子邮件的过程(在oracle11g中)

    declare
    l_mail_con 
     utl_smtp.connection;
    begin
    l_mail_con:=utl_smtp.open_connection('smtp.gmail.com',25);
    utl_smtp.EHLO(l_mail_con,'smtp.gmail.com');
    utl_smtp.command(l_mail_con,'STARTTLS');
    utl_smtp.command(l_mail_con,'AUTH','LOGIN');
    utl_smtp.command(l_mail_con,utl_encode.base64_encode(utl_raw.cast_to_raw('myemail@gmail.com')));
    utl_smtp.command(l_mail_con,utl_encode.base64_encode(utl_raw.cast_to_raw('mypass')));

    utl_smtp.mail(l_mail_con,'mymail@gmail.com');
    utl_smtp.rcpt(l_mail_con,'receivermail.com');
    utl_smtp.data(l_mail_con,'hi saeideh'||utl_tcp.crlf||utl_tcp.crlf);
    utl_smtp.quit(l_mail_con);

    end;

    /

这是我的错误

ERROR at line 1:
ORA-29278: SMTP transient error: 421 Service not available
ORA-06512: at "SYS.UTL_SMTP", line 54
ORA-06512: at "SYS.UTL_SMTP", line 138
ORA-06512: at "SYS.UTL_SMTP", line 219
ORA-06512: at line 7

这是telnet输出

$ telnet smtp.gmail.com 25

Trying 173.194.65.109...

Connected to smtp.gmail.com (173.194.65.109).

Escape character is '^]'.

220 smtp.gmail.com ESMTP fa13sm2443360wid.17 - gsmtp

ehlo Page on gmail.com

smtp.gmail.com at your service, [188.158.207.128]

250-SIZE 35882577
250-8BITMIME

250-STARTTLS

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-CHUNKING

250 SMTPUTF8

starttls
220 2.0.0 Ready to start TLS

auth login

Connection closed by foreign host.

我该如何解决这个错误? 请帮我谢谢

我认为您尚未启用ACL (access control list)

  1. 在Oracle数据库中使用一个数据库用户创建ACL

     BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'smtp-gate-permissions.xml', description => 'Permissions for smtp gate', principal => 'SCOTT', is_grant => TRUE, privilege => 'connect' ); COMMIT; END; 
  2. 将ACL分配给一个或多个网络主机

     BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL ( acl => 'smtp-gate-permissions.xml', host => '<smtp_server>', lower_port => 25, upper_port => null); COMMIT; END; 
  3. 确认

     SELECT host, lower_port, upper_port, acl FROM dba_network_acls; SELECT acl, principal, privilege, is_grant, TO_CHAR(start_date, 'DD-MON-YYYY HH24:MI') AS start_date, TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date FROM dba_network_acl_privileges 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM