It turns out to be really simple, just set an APEX session, and make sure that the database-user is connected to an APEX workspace. The code is as follow:
create or replace procedure my_send_mail( p_to in varchar2 , p_from in varchar2 , p_subject in varchar2 , p_message in varchar2 , p_apex_workspace in varchar2) is l_workspace_id number := null; begin -- -- This procedure is possibly called from outside an APEX session. -- Take note: one is required to set-up an session, before APEX_MAIL.SEND -- can be used. Make sure that the schema using this procedure is -- connected to the workpace. -- -- Ignoring the above will raise -- ORA-20001: This procedure must be invoked from within an -- application session -- l_workspace_id := apex_util.find_security_group_id (p_workspace => p_apex_workspace); -- apex_util.set_security_group_id (p_security_group_id => l_workspace_id); -- apex_mail.send( p_to => p_to, p_from => p_from, p_subj => p_subject, p_body => p_message); -- apex_mail.push_queue; end my_send_mail; /Calling the above procedure will give satisfying results in any PL/SQL session, as long as the schema is connected to an APEX workspace.