Twoje podejście jest OK, ale Twój wrapper proc musi znajdować się w bazie danych msdb. Następnie wykonujesz "EXEC msdb.dbo._TestSendMail"
To nadal pozostawia kwestię uprawnień na dbo._TestSendMail w msdb. Ale public/EXECUTE wystarczy:ujawnia tylko 3 potrzebne parametry.
W razie wątpliwości dodaj Z SZYFROWANIEM. Jest to wystarczająco dobre, aby powstrzymać każdego, kto nie ma uprawnień administratora, przeglądającego kod
USE msdb
GO
CREATE PROCEDURE [dbo].[_TestSendMail]
(
@To NVARCHAR(1000),
@Subject NVARCHAR(100),
@Body NVARCHAR(MAX)
)
-- not needec WITH EXECUTE AS OWNER
AS
BEGIN
EXEC dbo.sp_send_dbmail @profile_name = N'myProfile',
@recipients = @To, @subject = @Subject, @body = @Body
END