Je suis sur SQL Server 2016 et je m'éclate ... mon DB Mail n'envoie pas et je suis à court d'endroits pour chercher. J'ai revérifié les autorisations du compte SQL pour l'exécutable DBmail - il a lu et exécuté. J'ai entré une règle pour le port sortant du pare-feu 587. J'ai essayé un autre compte de messagerie et un autre profil avec les mêmes problèmes non envoyés. Les seules entrées dans les journaux (journaux de messagerie db) sont le début et la fin du service. Je ne trouve aucune erreur nulle part. Les e-mails semblent simplement entrer dans la file d'attente d'envoi et ne jamais la quitter. Les comptes peuvent envoyer et recevoir des e-mails de leur propre chef et à partir d'une instance SQL Server 2014 sur une autre machine.
J'ai une file d'attente d'articles avec le statut envoyé "non envoyé" et j'ai vérifié tous les endroits normaux avec les résultats attendus dans chacun d'eux, à part une longue file d'attente de courrier non envoyé:
SELECT * FROM msdb..sysmail_event_log order by log_id DESC
SELECT * FROM dbo.sysmail_mailitems
SELECT * FROM dbo.sysmail_sentitems
USE msdb
SELECT sent_status, *
FROM sysmail_allitems
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
EXECUTE msdb.dbo.sysmail_help_status_sp
J'ai essayé de l'éteindre et de le rallumer ... alors ai-je raté un DMV etc. qui pourrait faire la lumière sur cette situation? Est-ce un problème connu avec SQL Server 2016 que je n'ai pas dans mes recherches? Y a-t-il d'autres étapes possibles pour envoyer ce courrier?
Sur un coup de tête, lors de la double vérification des autorisations, j'ai double-cliqué sur l'exécutable de messagerie DB réel. Le résultat sur la machine SQL Server 2014 était une fenêtre de commande vide. Sur SQL Server 2016, cliquer sur l'exécutable DB Mail a présenté ce message:
Je ne trouve cette exigence nulle part dans la documentation de SQL Server 2016, mais c'est clairement une exigence. DB Mail fonctionne parfaitement sans autre changement que l'installation de .NET 3.5.
Selon le support Microsoft, il existe un bogue dans le programme d'installation de SQL Server 2016 qui empêche le courrier de la base de données de fonctionner sans .net 3.5
Il y a un moyen de contourner le problème en créant un fichier DatabaseMail.exe.config dans le même dossier où le DatabaseMail.exe existe (dossier Binn) écrivez ce qui suit dans le fichier et enregistrez avec encodage utf-8
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
Jetez plutôt un œil à cela. De cette façon, il vous suffit de copier un fichier au lieu d'installer .net 3.5. Vous devez d'abord installer CU1. Vérifiez ici pour plus de détails.
Outre les causes déjà mentionnées, il est également important d'activer le profil de messagerie au niveau de l'Agent SQL Server comme indiqué ici :
- Cliquez avec le bouton droit sur l'Agent SQL Server> sélectionnez Propriétés
Sélectionnez Système d'alerte dans le volet gauche
Coche> Activer le profil de messagerie
- Vérifier le système de messagerie: messagerie de base de données
- Vérifier le profil de messagerie: SQLAlerts
- Coche> Inclure le corps de l'e-mail dans le message de notification
- Cliquez sur OK.
- Redémarrez l'agent.