在oracle中使用UTL_SMTP发送多封电子邮件

时间:2014-08-26 04:57:26

标签: oracle email smtp

我正在尝试编写一个使用UTL_SMTP函数从Oracle DB发送电子邮件的过程。它工作正常,如果我只发送一个电子邮件地址,但如果我传递多个电子邮件作为逗号或semicollon(;),它的错误像

ORA-29277: invalid SMTP operation
ORA-29279: SMTP permanent error: 501 5.1.3 Invalid address

我写的声明如下: - 其中P_ALERT_DESTINATION是一个有多个电子邮件ID的变量。

UTL_SMTP.WRITE_DATA(L_MAIL_CONN, 'To: ' || P_ALERT_DESTINATION || UTL_TCP.CRLF);

1 个答案:

答案 0 :(得分:1)

我认为您需要循环所有电子邮件地址并对每个电子邮件地址进行调用。 伪代码:

for all_addresses loop
  UTL_SMTP.WRITE_DATA(L_MAIL_CONN, 'To: ' || one_address|| UTL_TCP.CRLF)
end loop;

<强>编辑: 在这里,你应该这样做:

declare
  cursor split_cursor(p_to in varchar2) is
  select regexp_substr(p_to, '[^,]+', 1, level) email_address
    from dual
  connect by regexp_substr(p_to, '[^,]+', 1, level) is not null;
begin

  for i in split_cursor(P_ALERT_DESTINATION) loop
    UTL_SMTP.WRITE_DATA(L_MAIL_CONN, 'To: ' || i.email_address|| UTL_TCP.CRLF);
  end loop;

end;

如果变量包含这些空格,您还应该删除所有空格。