Su enfoque está bien, pero su proceso contenedor debe estar en la base de datos msdb. Luego, ejecuta "EXEC msdb.dbo._TestSendMail"
Esto aún deja el problema de los permisos en dbo._TestSendMail en msdb. Pero public/EXECUTE será suficiente:solo expone los 3 parámetros que necesita.
En caso de duda, agregue CON CIFRADO. Esto es lo suficientemente bueno para evitar que cualquier persona sin derechos de administrador de sistemas vea el código
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