Table of Contents

Send mail using CLR Stored Procedure

Creating CLR procedure

SendMail.cs

using System.Net;
using System.Net.Mail;
using Microsoft.SqlServer.Server;
 
namespace MsSqlServerProcedures
{
    public class SendMail
    {
 
        [SqlProcedure()]
        public static void spSendMail(string smtpServer, string smtpUser, string smtpPasswd, string recipients, string subject, string from, string body)
        {
            SmtpClient mySmtpClient = null;
 
            using (var myMessage = new MailMessage(@from, recipients))
            {
 
                myMessage.Subject = subject;
                myMessage.Body = body;
                myMessage.IsBodyHtml = true;
 
                mySmtpClient = new SmtpClient(smtpServer);
                mySmtpClient.Credentials = new NetworkCredential(smtpUser, smtpPasswd);
                mySmtpClient.Send(myMessage);
                if (SqlContext.Pipe != null) SqlContext.Pipe.Send("Message was sent succesfully.");
            }
        }
 
    }
}

Extension using ConfigurationManager

Using ConfigurationManager

using System.Configuration;
 
...
 
public static void spSendMail(string recipients, string subject, string from, string body)
 
...
 
var smtpServer = ConfigurationManager.AppSettings["SMTPserver"];
var userName = ConfigurationManager.AppSettings["UserName"];
var passwd = ConfigurationManager.AppSettings["Passwd"];
 
...

SQL server deployment

DeploymentScript

/* Deployment Script */
ALTER DATABASE Your_Database SET trustworthy ON -- allows access resources outside the database
 
CREATE ASSEMBLY SendEmail FROM 'C:\MSSQL\MsSqlServerProcedures.dll'  
WITH PERMISSION_SET = UNSAFE  
GO 
 
-- Create Procedures
 
CREATE PROCEDURE [dbo].[spSendMail]
   @smtpServer [nvarchar](255),
   @smtpUser [nvarchar](255),
   @smtpPasswd [nvarchar](255),
   @recipients [nvarchar](4000),
   @subject [nvarchar](4000),
   @FROM [nvarchar](4000),
   @body [nvarchar](4000)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [SendEmail].[MsSqlServerProcedures.SendMail].[spSendMail]
 
GO
 
-- Enable CLR
EXEC sp_configure 'show advanced options' , '1';
reconfigure;
GO
EXEC sp_configure 'clr enabled' , '1' ;
reconfigure;
GO
EXEC sp_configure 'show advanced options' , '0';
reconfigure;
GO

Testing

TestScript

EXEC spSendMail @smtpServer = 'smtp.server.com',
				@smtpUser = 'userName',
				@smtpPasswd = 'password',
				@recipients = 'someone@address.com', 
				@subject = 'Email from SQL Express', 
				@FROM = 'me@server.com', 
				@body = 'It wokrs! This is an email from your SQL Server!' 

Removing

RemoveScript

/* Removes procedures and assemblies */
DROP PROCEDURE dbo.spSendMail
GO 
DROP ASSEMBLY SendEmail 
GO

References