注册

UTL_SMTP兼容替换SQL server的sp_send_dbmail

DM_009527 2026/10/28 286 2 已解决

【DM版本】:03134284604-20260707-335949-20228
【操作系统】:Kylin V10
【CPU】:x86
【问题描述】*:在达梦端使用UTL_SMTP替换sp_send_dbmail,测试用例如下报错。

已提前执行创建系统包:
CALL SP_CREATE_SYSTEM_PACKAGES(1,'UTL_SMTP');
CALL SP_CREATE_SYSTEM_PACKAGES(1,'UTL_TCP');
CALL SP_CREATE_SYSTEM_PACKAGES(1,'UTL_RAW');

DECLARE
  conn      UTL_SMTP.CONNECTION;
  v_subject VARCHAR(100) := '达梦UTL_SMTP直发测试';
  v_body    VARCHAR(500) := '达梦端 直发链路测试邮件,收到即链路闭环。';
BEGIN
  conn := UTL_SMTP.OPEN_CONNECTION('192.168.xx.xx', 25);
  UTL_SMTP.HELO(conn, 'xxx.com.cn');
  UTL_SMTP.COMMAND(conn, 'AUTH LOGIN');
  UTL_SMTP.COMMAND(conn, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('test@xxx.com.cn'))));
  UTL_SMTP.COMMAND(conn, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW('********'))));
  UTL_SMTP.COMMAND(conn, 'MAIL FROM:<test@xxx.com.cn>');
  UTL_SMTP.COMMAND(conn, 'RCPT TO:<test01@xxx.com.cn>');
  UTL_SMTP.OPEN_DATA(conn);
  UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW('From: test@xxx.com.cn'||UTL_TCP.CRLF));
  UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW('To: test01@xxx.com.cn'||UTL_TCP.CRLF));
  UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW('Subject: =?GBK?B?'||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(v_subject)))||'?='||UTL_TCP.CRLF));
  UTL_SMTP.WRITE_RAW_DATA(conn, UTL_RAW.CAST_TO_RAW('MIME-Version: 1.0'||UTL_TCP.CRLF||'Content-Type: text/plain; charset=GBK'||UTL_TCP.CRLF||UTL_TCP.CRLF));
  UTL_SMTP.WRITE_DATA(conn, v_body);
  UTL_SMTP.CLOSE_DATA(conn);
  UTL_SMTP.QUIT(conn);
  DBMS_OUTPUT.PUT_LINE('测试邮件已提交');
END;


执行失败(语句1)
-20021: 一般网络错误 250 2.1.0 Sender OK

-20021: utl_smtp.command line 195 
-20021: anonymous block line 11 

回答 0
暂无回答
扫一扫
联系客服