如何在PL / SQL(Oracle)中发送电子邮件?

问题描述 投票:0回答:2

我有一个程序,它计算SMS_OUTBOX表中的行数,并在行cont超过1000时发送电子邮件。我的程序如下:

CREATE OR REPLACE PROCEDURE SEND_EMAIL_ABOUT_PENDING_SMS IS
  CHECK_SMS_COUNT NUMBER := 1000;
  CURRENT_SMS_COUNT NUMBER;
BEGIN
  SELECT COUNT(1) INTO CURRENT_SMS_COUNT FROM SMS_SCHEMA.SMS_OUTBOX;

  IF CURRENT_SMS_COUNT >= CHECK_SMS_COUNT THEN
    UTL_MAIL.SEND(
        sender=>'<SENDER_EMAIL>',
        recipients=>'<RECIPIENT_EMAIL>',
        subject=>'Pending SMS',
        Message=>'Pending SMS count exceeded.'
    );
  END IF;
END SEND_EMAIL_ABOUT_PENDING_SMS;
/

当我编译上面的时候我得到了这个错误。

enter image description here

然后我尝试这行代码执行没有过程:

EXEC UTL_MAIL.SEND(
    sender=>'<SENDER_EMAIL>',
    recipients=>'<RECIPIENT_EMAIL>',
    subject=>'Pending SMS',
    Message=>'Pending SMS count exceeded.'
);

然后我收到了这个错误:

PLS-00302:必须声明组件'SEND'

我是Oracle(和PL / SQL)的新手。任何人都可以帮我在Oracle中发送电子邮件,需要哪些配置?

oracle plsql oracle11g oracle10g utl-mail
2个回答
1
投票

请检查UTL_MAIL是否已正确安装。

请点击链接UTL_MAIL获取所需的信息和配置

Setup
The package is loaded by running the following scripts.

CONN sys/password AS SYSDBA
@$ORACLE_HOME/rdbms/admin/utlmail.sql
@$ORACLE_HOME/rdbms/admin/prvtmail.plb

In addition the SMTP_OUT_SERVER parameter must be set to identify the SMTP server.

CONN sys/password AS SYSDBA
ALTER SYSTEM SET smtp_out_server='smtp.domain.com' SCOPE=SPFILE;

-- Instance restart only necessary in 10gR1.
SHUTDOWN IMMEDIATE
STARTUP

0
投票

或者,您可以使用utl_http.request方法作为

  v_url := 'http://<yourWebSite>/notification.asp?sender=<SENDER_EMAIL>
                                                 &recipients=<RECIPIENT_EMAIL>
                                                 &subject=Pending SMS
                                                 &message=Pending SMS count exceeded.';

  v_rep := utl_http.request(utl_url.escape(v_url, false, 'UTF-8'));

哪里

  v_url varchar2(4000);
  v_rep varchar2(4000);

需要在begin关键字之前声明。

© www.soinside.com 2019 - 2024. All rights reserved.