Пакет UTL_MAIL сильно упрощает процесс отправки сообщений по сравнению с UTL_SMTP. Однако и в десятке, и в 11-ом оракле пакет не установлен по-умолчанию из-за потенциальных уязвимостей.
PLS-00201: identifier 'UTL_MAIL' must be declared
Чтобы установить прогоняем следующие скрипты под sys:
@?/rdbms/admin/utlmail.sql
@?/rdbms/admin/prvtmail.plb
@?/rdbms/admin/prvtmail.plb
Рекомендуется задавать параметр smtp_out_server виде - mail_server_ip:port на уровне базы. Хотя можно и обойтись простым alter session.
Выдаем права на пакет utl_mail пользователю, от которого собираемся отправлять сообщения. Иначе получим:
PLS-00201: identifier 'UTL_MAIL' must be declared
Проверка работоспособности:
EXEC UTL_MAIL.SEND(
SENDER => 'senders email',
RECIPIENTS => 'recipients email',
SUBJECT => 'subject line',
SENDER => 'senders email',
RECIPIENTS => 'recipients email',
SUBJECT => 'subject line',
MESSAGE => 'message');
В 11g требуются дополнительные настройки. Ведь даже при выдаче прав попытка вызова utl_mail вернет:
ORA-24247: network access denied by access control list (ACL)
Необходимо использовать DBMS_NETWORK_ACL_ADMIN.
Для connect privilege.
Для connect privilege.
begin
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
Acl => 'utlmailpkg.xml',
Description => 'Normal Access',
Principal => 'ASANGA',
Is_Grant => True,Privilege => 'connect',
Start_Date => Null,
End_Date => Null);
End;
/
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
Acl => 'utlmailpkg.xml',
Description => 'Normal Access',
Principal => 'ASANGA',
Is_Grant => True,Privilege => 'connect',
Start_Date => Null,
End_Date => Null);
End;
/
Для resolve hosts:
begin
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'utlmailpkg.xml',
principal => 'ASANGA',
is_grant => true,
privilege => 'resolve');
end;
/
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'utlmailpkg.xml',
principal => 'ASANGA',
is_grant => true,
privilege => 'resolve');
end;
/
И привязать Access Control List к почтовому IP и порту почтового сервера:
begin
dbms_network_acl_admin.assign_acl (
acl => 'utlmailpkg.xml',
host => '192.168.0.10',
lower_port => 25,
upper_port => NULL);
end;
/
dbms_network_acl_admin.assign_acl (
acl => 'utlmailpkg.xml',
host => '192.168.0.10',
lower_port => 25,
upper_port => NULL);
end;
/
После проведения настроек требуется commit.
Проверка Access Control List осуществляется:
SELECT
DECODE(
DBMS_NETWORK_ACL_ADMIN.check_privilege('utlmailpkg.xml', 'ASANGA', 'connect'),
1, 'GRANTED', 0, 'DENIED', NULL) as "Connect",
DECODE(
DBMS_NETWORK_ACL_ADMIN.check_privilege('utlmailpkg.xml', 'ASANGA', 'resolve'),
1, 'GRANTED', 0, 'DENIED', NULL) as "Resolve"
FROM dual;
DBMS_NETWORK_ACL_ADMIN.check_privilege('utlmailpkg.xml', 'ASANGA', 'connect'),
1, 'GRANTED', 0, 'DENIED', NULL) as "Connect",
DECODE(
DBMS_NETWORK_ACL_ADMIN.check_privilege('utlmailpkg.xml', 'ASANGA', 'resolve'),
1, 'GRANTED', 0, 'DENIED', NULL) as "Resolve"
FROM dual;
Теперь отправка почты будет работать.
Комментарии
Отправить комментарий