В очередной раз обращаюсь к работе с почтой через CLR-сборки. Я уже описывал, как читать почту по протоколу POP3 и IMAP. Теперь небольшая демонстрация, как отправлять почту через SMTP.
SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
Для отправки почты в SQL Server 2005 и выше используется Компонент Database Mail.
Компонент Database Mail — это решение уровня предприятия для отправки сообщений электронной почты от компонента SQL Server Database Engine. Используя компонент Database Mail, приложения базы данных могут отправлять почтовые сообщения пользователям. Сообщения могут содержать результаты запроса, а также могут включать файлы из любого сетевого ресурса. Компонент Database Mail спроектирован для надежности, масштабируемости, безопасности и простой поддержки.
А я покажу простенький код сборки для отправки почты, не используя Database Mail.
Код сборки:
using System;
using System.Net;
using System.Net.Mail;
public class SMTPClr
{
public static void SendMessage(string From, string To, string Subject, string Body, string Host, string UserName, string Password)
{
MailMessage mes = new MailMessage(From, To, Subject, Body);
SmtpClient client = new SmtpClient(Host);
client.Credentials = new NetworkCredential(UserName, Password);
client.Send(mes);
}
}
Вот и всё!!!
Далее регистрируем сборку и отправляем тестовое письмо:
--Регистрируем сборку
CREATE ASSEMBLY SMTPCLR
FROM 'C:\SMTPClr\SMTPCLR.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO
--Создаём процедуру отправки почты
CREATE PROCEDURE SendMessage
(
--От кого
@From nvarchar(max),
--Кому
@To nvarchar(max),
--Тема письма
@Subject nvarchar(max),
--Само сообщение
@Body nvarchar(max),
--Имя сервера или его IP (порт 25)
@Host nvarchar(max),
--Имя пользователя
@UserName nvarchar(max),
--Пароль
@Password nvarchar(max)
)
AS
EXTERNAL NAME SMTPCLR.SMTPClr.SendMessage
GO
--Отправляем письмо
EXECUTE SendMessage 'admin@microsoft.com', 'a.knyazev@t-sql.ru', 'SMTPClr', 'Hi, Alexey!', 'MySMTPServer', 'MySMTPUserName', 'MySMTPPassword'
И не забываем предварительно включить возможность работы с CLR-сборками:
--Включаем выполнение пользовательских сборок
SP_CONFIGURE 'clr enabled', 1
GO
RECONFIGURE
GO
--Модули базы данных (например, пользовательские функции или хранимые процедуры),
--которые используют контекст олицетворения, могут обращаться к ресурсам,
--находящимся вне базы данных.
ALTER DATABASE [Ваша БД] SET TRUSTWORTHY ON
GO
По просьбе трудящихся, выкладываю саму сборку сюда:
SMTPCLR.zip