Об отправке электронной почты средствами Oracle APEX написано много, достаточно набрать в поисковике "apex_mail.send". Если Вам нужно отправить письмо из приложения, например при нажатии на кнопку, код процесса будет примерно таким:
BEGIN
l_html := '
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8"></head>
<body lang=RU link=blue vlink=purple>
тело письма
</body>
</html>';
apex_mail.send(p_to => 'to@mail.ru', p_from => 'from@mail.ru', p_body => 'тело письма', p_body_html => l_html, p_subj => 'Тема');
END;
Этот анонимный блок выполняется в рамках сессии APEX. Если же Вам нужно отправить письмо вне рамок сессии APEX, например, job-м по расписанию, или при срабатывании триггера, то необходимо перед вызовом apex_mail.send
задать security_group_id
, без этого будет ошибка "ORA-20001: This procedure must be invoked from within an application session". Правильно это делать процедурой:
wwv_flow_api.set_security_group_id(apex_util.find_security_group_id(p_workspace => 'Имя вашего WorkSpace-а'));
или даже так:
wwv_flow_api.set_security_group_id();
Кроме указанной выше процедуры есть еще одна:
apex_util.set_security_group_id;
Её я не рекомендую использовать! Дело в том, что работают эти две процедуры по разному. Это проявляется когда код, отправляющий письмо, выполняется в рамках сессии БД инициированной пользователем ANONYMOUS. В первом случае security_group_id
устанавливается корректно, во втором же остается пустым и приводит к ошибке "ORA-20001: This procedure must be invoked from within an application session". Так что правильно писать так:
BEGIN
l_html := '
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8"></head>
<body lang=RU link=blue vlink=purple>
тело письма
</body>
</html>';
wwv_flow_api.set_security_group_id();
apex_mail.send(p_to => 'to@mail.ru', p_from => 'from@mail.ru', p_body => 'тело письма', p_body_html => l_html, p_subj => 'Тема');
END;