Отправка почты SMTP (очередная сборка)

by Alexey Knyazev 7. апреля 2010 10:15

В очередной раз обращаюсь к работе с почтой через 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);
    }
}

 

Вот и всё!!! Smile

Далее регистрируем сборку и отправляем тестовое письмо:

--Регистрируем сборку
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

Tags: ,

SQL Server

Комментарии

08.04.2010 19:32:57 #

Vlad

Это все конечно хорошо, но нужно понимать, что произойдет если, например, сделать бекап и восстановление БД. Отправка писем не заработает.По моему мнению для надежной работы лучше использовать Database Mail. А если вы знаете тонкости настроек CLR сборок, то конечно удобно использовать CLR сборку.

Vlad Россия

09.04.2010 9:14:33 #

Admin

Цель данной заметки не убедить, что отправка почты через сборку лучше, чем Database Mail, а показать возможные альтернативы, а так же продемонстрировать в очередной раз, как с помощью нескольких строк расширить стандартный функционал SQL Server

Admin Россия

14.04.2010 17:14:52 #

Oleg

А как можно посмотреть все зарегистрированные сборки? Или это нельзя сделать?

Oleg Россия

14.04.2010 18:51:39 #

Admin

SELECT * FROM sys.assemblies

Admin Россия

Добавить комментарий


(Отображает Gravatar)

  Country flag

biuquote
  • Комментарий
  • Предпросмотр
Loading



Powered by BlogEngine.NET 1.6.0.0
Все права защищены © T-SQL.RU | Alexey Knyazev 2008-2010

MVP:SQL