La messagerie SQL Server 2016 DB n'envoie pas

17

Je suis sur SQL Server 2016 et je m'éclate ... mon DB Mail n'envoie pas et je manque d'endroits où 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?

Dave
la source
Le profil à partir duquel vous envoyez un e-mail est-il privé?
Kin Shah
Une erreur? Et les journaux? Et le serveur de messagerie? Le serveur de messagerie reçoit-il une connexion de SQL? Il manque beaucoup d'informations pertinentes à la question ...
Paolo
@kin Non, c'est un e-mail public. Les deux e-mails sont Office 365 et les comptes envoient et reçoivent très bien de SQL 2014. Ajout de quelques détails à la fin du 1er paragraphe décrivant la situation.
Dave
Je voulais dire votre profil de messagerie de base de données.
Kin Shah
Êtes-vous en mesure d'envoyer une requête ping / telnet au serveur SMTP à partir de votre boîte SQL Server 2016? Si oui, pouvez-vous essayer d'exécuter le script VB à partir du lien mssqltips.com/sqlservertip/1625/… pour exclure tout problème SMTP. Si vous recevez du courrier de test, vous pouvez être sûr qu'il s'agit d'un problème avec SQL Server.
SQLPRODDBA

Réponses:

17

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:

entrez la description de l'image ici

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.

Dave
la source
J'ai eu le même problème. Résolu en appliquant .net 3.5.
Sir Swears-a-lot
cela a également résolu mon problème! cela me rendait fou, mais l'installation de NET3.5 a résolu mon problème!
NULL.Dude
Cela a résolu le même problème pour moi sur 2016 SP1 CU8
James Anderson
où se trouve l'exécutable de messagerie DB?
JzInqXc9Dg
@Dave OH JESUS ​​C'EST INCROYABLE. Je me demande simplement ... utilisez-vous LogMeIn sur ces serveurs? Nous avons rencontré des situations bizarres où LogMeIn désinstalle ou supprime des éléments, et ils refusent de l'admettre. Mon courrier de base de données à un moment donné a bien fonctionné sur une boîte et a définitivement cessé de fonctionner à peu près au moment où nous avons déménagé à LogMeIn
John Zabroski
10

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 travail à faire en créant un fichier DatabaseMail.exe.config dans le même dossier où existe DatabaseMail.exe (dossier Binn), écrivez ce qui suit dans le fichier et enregistrez avec le codage utf-8

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0"/>     
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>

Source: CORRECTIF: SQL Server 2016 Database Mail ne fonctionne pas sur un ordinateur sur lequel le .NET Framework 3.5 n'est pas installé

Jalal Shahoud
la source
4

Prenez garde à cela à la place. 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.

Yhagger
la source
2
Il existe déjà une [mise à jour cumulative 2 pour SQL Server 2016 | support.microsoft.com/en-us/kb/3182270] avec [CORRECTIF: SQL Server 2016 Database Mail ne fonctionne pas sur un ordinateur sur lequel le .NET Framework 3.5 n'est pas installé | support.microsoft.com/en-us/kb/3186435] .
Vladislav
1
Je n'ai passé que 30 minutes à examiner ce problème avant de finir ici. Merci de m'avoir fait gagner beaucoup plus de temps.
Paul
1

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.
Alexei
la source