none
sp_send_dbmail klappt nicht aus DDL Trigger heraus RRS feed

  • Frage

  • Hallo Stefan,

    erstmal danke für die Info!

    Jedoch kann ich aus dem Trigger heraus keine Mail senden. 

    Ich dacht mir folgendes sollte doch gehen: 

    USE [master]
    GO
    
    /****** Object:  DdlTrigger [trg_CreateDatabase]    Script Date: 23.03.2020 21:32:48 ******/
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TRIGGER [trg_CreateDatabase] ON ALL SERVER
    FOR CREATE_DATABASE
    AS
       EXEC msdb.dbo.sp_send_dbmail  
       @profile_name = 'Mailversand',   
       @importance = 'High',
       @recipients = 'mail@mail.mail',  
       @query = 'SELECT getdate()' ,  
       @subject = 'Testlauf2',  
       @attach_query_result_as_file = 1,  
       --@body =  @bodytext;
       @body = 'test',
       @body_format = 'HTML' ;
        --SELECT EVENTDATA().value( '(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)' )
    GO
    
    ENABLE TRIGGER [trg_CreateDatabase] ON ALL SERVER
    GO
    
    

    Jedoch erhalte ich keine Mail wenn ich eine neue Datenbank anlege! Der Server versucht krampfhaft die Datenbank anzulegen aber mehr als "wird ausgeführt" ist nicht zu sehen!

    An was liegt das ? Kannst du helfen?

    Führe ich den Mailversand so aus, funktioniert alles. Daran kann es also nicht liegen. 

    [Moderator Stefan Falz]
    Split: Originalthread: Trigger auf sys.databases

    Montag, 23. März 2020 20:39

Antworten

  • Hier sind mal ein paar Statements zum Troubleshooting. Beachte bitte auch, wer die Mail schicken will und welches Profil dann zum Einsatz kommen wird!

    -- Protokoll anzeigen
    SELECT * FROM msdb.dbo.sysmail_event_log 
    order by log_date desc;
    
    -- Queue anzeigen
    exec msdb..sysmail_help_queue_sp @queue_type = 'Mail' ;
    
    EXEC msdb.dbo.sysmail_stop_sp;
    EXEC msdb.dbo.sysmail_start_sp;
    EXEC msdb.dbo.sysmail_help_status_sp ;
    
    EXECUTE msdb.dbo.sysmail_help_queue_sp ;
    GO
    
    -- Welche einfachen Benutzer dürfen Mail verwenden?
    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole' ;
    
    Use msdb
    go
    sp_addrolemember @rolename = 'DatabaseMailUserRole', 
       @membername = '<benutzer>';
    
    
    -- Welche öffentlichen Profile sind verfügbar?
    EXEC msdb.dbo.sysmail_help_principalprofile_sp ;
    
    -- Welche Profile sind insgesamt definiert?
    EXEC msdb.dbo.sysmail_help_profile_sp ;
    
    -- Wer hat was geschickt?
    SELECT sent_account_id, send_request_user, sent_date, recipients, blind_copy_recipients, subject, body, file_attachments
    FROM msdb.dbo.sysmail_sentitems 
    order by sent_date desc;
    
    -- Was hat nicht funktioniert?
    SELECT * FROM msdb.dbo.sysmail_faileditems
    order by mailitem_id;
    
    -- Was ist noch nicht gesendet?
    SELECT * FROM msdb.dbo.sysmail_unsentitems
    order by mailitem_id;

    HTH!


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Dienstag, 24. März 2020 07:06

Alle Antworten

  • Hi,

    Eine Mail zu versenden hat mit einem DDL Trigger nichts zu tun und das Fehlschlagen dieses Tasks kann die verschiedensten Ursachen haben.

    Daher habe ich die neue Frage in einen neuen Thread ausgelagert.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Montag, 23. März 2020 22:17
    Moderator
  • Hi,

    klappt denn der Aufruf auf sp_send_dbmail, wenn Du den nicht in einem Trigger ausführst?

    Ein generelles Problem ist es nicht, in einem Test meinerseits hat das problemlos funktioniert. Daher denke ich eher mal, dass deine Database Mail Konfiguration nicht passt.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Montag, 23. März 2020 22:26
    Moderator
  • Hier sind mal ein paar Statements zum Troubleshooting. Beachte bitte auch, wer die Mail schicken will und welches Profil dann zum Einsatz kommen wird!

    -- Protokoll anzeigen
    SELECT * FROM msdb.dbo.sysmail_event_log 
    order by log_date desc;
    
    -- Queue anzeigen
    exec msdb..sysmail_help_queue_sp @queue_type = 'Mail' ;
    
    EXEC msdb.dbo.sysmail_stop_sp;
    EXEC msdb.dbo.sysmail_start_sp;
    EXEC msdb.dbo.sysmail_help_status_sp ;
    
    EXECUTE msdb.dbo.sysmail_help_queue_sp ;
    GO
    
    -- Welche einfachen Benutzer dürfen Mail verwenden?
    EXEC msdb.sys.sp_helprolemember 'DatabaseMailUserRole' ;
    
    Use msdb
    go
    sp_addrolemember @rolename = 'DatabaseMailUserRole', 
       @membername = '<benutzer>';
    
    
    -- Welche öffentlichen Profile sind verfügbar?
    EXEC msdb.dbo.sysmail_help_principalprofile_sp ;
    
    -- Welche Profile sind insgesamt definiert?
    EXEC msdb.dbo.sysmail_help_profile_sp ;
    
    -- Wer hat was geschickt?
    SELECT sent_account_id, send_request_user, sent_date, recipients, blind_copy_recipients, subject, body, file_attachments
    FROM msdb.dbo.sysmail_sentitems 
    order by sent_date desc;
    
    -- Was hat nicht funktioniert?
    SELECT * FROM msdb.dbo.sysmail_faileditems
    order by mailitem_id;
    
    -- Was ist noch nicht gesendet?
    SELECT * FROM msdb.dbo.sysmail_unsentitems
    order by mailitem_id;

    HTH!


    Einen schönen Tag noch, Christoph - http://www.insidesql.org/blogs/cmu

    Dienstag, 24. März 2020 07:06