none
Mail innerhalb eines Try / Catch-Blocks wird nicht gesendet RRS feed

  • Frage

  • Hallo zusammen,

    ich habe folgendes Problem. Ich möchte innerhalb eines Try / Catch-Blocks eines Jobs mittels msdb.dbo.sp_send_dbmail eine Mail verschicken. Jedoch kommt diese mail nicht an. Es wird aber im Verlauf des Jobs angezeigt, dass die Mail auf die queue gelegt wurde. An anderen stellen im Job funktioniert der Versandt jedoch Problemlos.

    Hier ein Beispielcode:

    SET QUOTED_IDENTIFIER ON
    
    	print 'Mail1 start'
    	EXEC msdb.dbo.sp_send_dbmail
    		@recipients = 'test@test.com',
    		@subject = 'Mail 1',
    		@body = 'Testmail',
    		@attach_query_result_as_File = 0
    	print 'Mail1 end'
    
    BEGIN TRY
    	print 'Mail2 start'
    	EXEC msdb.dbo.sp_send_dbmail
    		@recipients = 'test@test.com',
    		@subject = 'Mail 2',
    		@body = 'Testmail',
    		@attach_query_result_as_File = 0
    	print 'Mail2 end'
    
    	EXEC fehlerhafteFunktion
    END TRY
    
    BEGIN CATCH
    
    	print 'Mail3 start'
    	EXEC msdb.dbo.sp_send_dbmail
    		@recipients = 'test@test.com',
    		@subject = 'Mail 3',
    		@body = 'Testmail',
    		@attach_query_result_as_File = 0
    	print 'Mail3 end'
    
    END CATCH

    Hier auch noch die Ausgabe des Verlaufs in dem ersichtlich wird, dass der Catch-Block auch durchlaufen wird:

    Ausgeführt als Benutzer: ''MYDOM\SQLUSER''. 
    Mail1 start [SQLSTATE 01000] (Meldung 0)  
    E-Mail (ID: 5049) in der Warteschlange. [SQLSTATE 01000] (Meldung 0)  
    Mail1 end [SQLSTATE 01000] (Meldung 0)  
    Mail2 start [SQLSTATE 01000] (Meldung 0)  
    E-Mail (ID: 5050) in der Warteschlange. [SQLSTATE 01000] (Meldung 0)  
    Mail2 end [SQLSTATE 01000] (Meldung 0)  
    Mail3 start [SQLSTATE 01000] (Meldung 0)  
    E-Mail (ID: 5051) in der Warteschlange. [SQLSTATE 01000] (Meldung 0)  
    Mail3 end [SQLSTATE 01000] (Meldung 0).  
    Der Schritt war erfolgreich.

    Ich hoffe, es kann jemand helfen, woran das liegen könnte.

    Viele Grüße

    Florian

    Freitag, 21. Dezember 2012 13:13

Antworten

  • ja.

    schau die Errorcodes in CATCH Block an - vielleicht gibt es Dir eine Auskunft warum die Mails nicht gesendet wurde.

    Ueberdies, schau Dir mal diesen Thread an:

    http://social.msdn.microsoft.com/Forums/en-us/transactsql/thread/4941f3e5-eee1-4a5c-befb-1a390b059db6

    und speziell den undokumnetieren Return Wert von sp-send_dbmail.

    Frage, wird Mail 3 geschickt ?

    und lies mal diesen Kommentar in der Technischen Referenz: http://msdn.microsoft.com/de-de/library/ms190307.aspx

    Wird sp_send_dbmail ohne Transaktionskontext ausgeführt, startet Datenbank-E-Mail eine implizite Transaktion und führt einen Commit für die Transaktion aus. Wird sp_send_dbmail innerhalb einer vorhandenen Transaktion ausgeführt, überlässt Datenbank-E-Mail es dem Benutzer, entweder einen Commit oder ein Rollback für Änderungen auszuführen. Es wird keine innere Transaktion gestartet


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Samstag, 12. Januar 2013 20:45

Alle Antworten

  • Hallo Florian,

    hast Du schon nachgesehen, was in der Mail Queue steht?

    SELECT sent_status, *
    FROM msdb.dbo.sysmail_allitems
    WHERE mailitem_id = 5051


    Olaf Helper

    Blog Xing

    Freitag, 21. Dezember 2012 13:23
  • Gibt nichts zurück. Sieht so aus, als würde die Mail, trotz der entsprechenden Meldung im Verlauf, nicht auf die Queue gelegt (die 2 anderen Mails sind drinnen).
    Freitag, 21. Dezember 2012 13:26
  • Hat noch jemand eine Idee?
    Donnerstag, 10. Januar 2013 11:28
  • ja.

    schau die Errorcodes in CATCH Block an - vielleicht gibt es Dir eine Auskunft warum die Mails nicht gesendet wurde.

    Ueberdies, schau Dir mal diesen Thread an:

    http://social.msdn.microsoft.com/Forums/en-us/transactsql/thread/4941f3e5-eee1-4a5c-befb-1a390b059db6

    und speziell den undokumnetieren Return Wert von sp-send_dbmail.

    Frage, wird Mail 3 geschickt ?

    und lies mal diesen Kommentar in der Technischen Referenz: http://msdn.microsoft.com/de-de/library/ms190307.aspx

    Wird sp_send_dbmail ohne Transaktionskontext ausgeführt, startet Datenbank-E-Mail eine implizite Transaktion und führt einen Commit für die Transaktion aus. Wird sp_send_dbmail innerhalb einer vorhandenen Transaktion ausgeführt, überlässt Datenbank-E-Mail es dem Benutzer, entweder einen Commit oder ein Rollback für Änderungen auszuführen. Es wird keine innere Transaktion gestartet


    Please use Mark as Answer if my post solved your problem and use Vote As Helpful if a post was useful.


    Samstag, 12. Januar 2013 20:45
  • Die Technische Referenz war die Lösung! Vielen vielen Dank!

    Ich schätze, in der Funktion, die den Fehler wirft wird eine Transaktion geöffnet, dann kommt der Fehler und die Transaktion wird bei Mail 3 nicht beendet. Wenn ich nun vor Mail 3 ein ROLLBACK bzw. COMMIT mache, wird die Mail verschickt. Vielen vielen Dank!

    Mittwoch, 16. Januar 2013 12:25