ORA-29278: SMTP transitoire erreur: le Service n'est pas disponible lors de l'exécution de UTL_MAIL
Nous prévoyons d'installer le UTL_MAIL
Paquet, et nous sommes actuellement en train de tester la procédure d'installation décrite dans notre Environnement de Développement.
Après le succès de l'installation de la UTL_MAIL
Paquet de Scripts et la création de l'suffisant PUBLIC
des Synonymes et des Subventions,
nous obtenons l'erreur ORA-29278
lors de l'exécution du test Anonyme Bloc ci-dessous:
BEGIN
UTL_MAIL.SEND(sender => '[email protected]'
, recipients => '[email protected]'
, subject => 'Testmail'
, message => 'Hello');
END;
Tous les Détails du Message d'erreur:
ORA-29278: SMTP transient error: 421 4.3.2 Service not available
ORA-06512: at "SYS.UTL_MAIL", line 662
ORA-06512: at "SYS.UTL_MAIL", line 679
ORA-06512: at line 3
29278. 00000 - "SMTP transient error: %s"
*Cause: A SMTP transient error occurred.
*Action: Correct the error and retry the SMTP operation.
Que par la recherche de liens (Envoyer e-Mail à l'Aide de PLSQL),
j'ai peut-être besoin pour l'installation de la bonne liste de contrôle d'accès (ACL) pour que cela fonctionne. Cependant, lors de l'exécution du script ci-dessous, je suis toujours le même message d'erreur.
DECLARE
-- ACL name to be used for email access reuse the same value for all
-- future calls
l_acl VARCHAR2 (30) := 'utl_smtp.xml';
-- Oracle user to be given permission to send email
l_principal VARCHAR2 (30) := 'APPS';
-- Name of email server
g_mailhost VARCHAR2 (60) := 'smtprelay.xxxxx.com';
l_cnt INTEGER;
PROCEDURE validate_smtp_server
AS
l_value v$parameter.VALUE%TYPE;
l_parameter v$parameter.name%TYPE := 'smtp_out_server';
BEGIN
SELECT VALUE
INTO l_value
FROM v$parameter
WHERE name = l_parameter;
IF l_value IS NULL
THEN
raise_application_error (
-20001
, 'Oracle parameter '
|| l_parameter
|| ' has not been set'
|| UTL_TCP.crlf
|| 'it s/b smtprelay.alorica.com'
);
END IF;
DBMS_OUTPUT.put_line ('parameter ' || l_parameter || ' value is ' || l_value);
END validate_smtp_server;
PROCEDURE create_if_needed (p_acl IN VARCHAR2)
AS
l_cnt INTEGER;
BEGIN
SELECT COUNT (*) c
INTO l_cnt
FROM dba_network_acls a
WHERE SUBSTR (acl, INSTR (acl, '/', -1) + 1) = p_acl;
IF l_cnt = 0
THEN
DBMS_OUTPUT.put_line ('creating acl ' || p_acl);
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => p_acl
, description => 'Allow use of utl_smtp'
, principal => l_principal
, is_grant => TRUE
, privilege => 'connect'
);
DBMS_NETWORK_ACL_ADMIN.assign_acl (acl => p_acl, HOST => g_mailhost);
COMMIT;
ELSE
DBMS_OUTPUT.put_line (p_acl || ' acl already exists');
END IF;
END create_if_needed;
PROCEDURE add_if_needed (
p_principal IN VARCHAR2
, p_acl IN VARCHAR2
)
AS
l_cnt INTEGER;
BEGIN
SELECT COUNT (*) c
INTO l_cnt
FROM dba_network_acl_privileges
WHERE SUBSTR (acl, INSTR (acl, '/', -1) + 1) = p_acl
AND principal = p_principal;
IF l_cnt = 0
THEN
DBMS_NETWORK_ACL_ADMIN.add_privilege (
acl => 'utl_smtp.xml'
, principal => p_principal
, is_grant => TRUE
, privilege => 'connect'
);
COMMIT;
DBMS_OUTPUT.put_line ('access to ' || p_acl || ' added for ' || p_principal);
ELSE
DBMS_OUTPUT.put_line (p_principal || ' already has access to ' || p_acl);
END IF;
END add_if_needed;
BEGIN
EXECUTE IMMEDIATE 'grant execute on utl_mail to ' || l_principal;
create_if_needed (p_acl => l_acl);
add_if_needed (p_principal => l_principal, p_acl => l_acl);
DBMS_OUTPUT.put_line ('Verification SQL:');
DBMS_OUTPUT.put_line (' SELECT * FROM dba_network_acls;');
DBMS_OUTPUT.put_line (' SELECT * FROM dba_network_acl_privileges;');
COMMIT;
validate_smtp_server;
END;
Ce que d'autres mesures puis-je prendre ou à ce que d'autres instructions dois-je fournir pour les Administrateurs de base de données pour cela?
De Base De Données Oracle Version:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
"CORE 11.2.0.4.0 Production"
TNS for Solaris: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
Merci beaucoup.
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure de résoudre ce problème en communiquant avec l'Administrateur Système et en demandant les détails du Serveur de Messagerie.
S'avère, si nous ne serez qu'à l'envoi de l'email en interne, il est conseillé d'utiliser un autre serveur
mail.xxx.xxx.xxxx
depuis sa ne va pas être bloqué par le pare-feu.D'autre part, si nous allons être en envoyant un email à l'extérieur, un autre serveur est impliqué
smtprelay.xxxxx.com
et cela implique une étape supplémentaire de la liste Blanche des Serveurs Externes pour être envoyé.
Comme je l'ai vérifié dans
V$PARAMETER
, nous avons été à l'aide de lasmtprelay.xxxxx.com
serveur et a décidé d'essayer l'autre serveurmail.xxx.xxx.xxxx
.J'ai lancé la commande Alter comme ci-dessous:
et a couru le bloc anonyme et a été en mesure de recevoir l'e-mail avec succès.