Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Добрый день, коллеги!

настроил возможность отправки почты EXEC sp_send_dbmail
Теперь есть тривиальная задача - отправка почты ряду пользователей. Посоветуйте, пожалуйста, каким образом наиболее красиво реализовать это для ряда пользователей.
17 окт 13, 14:10    [14985446]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Glory
Member

Откуда:
Сообщений: 104751
MedBrat
Посоветуйте, пожалуйста, каким образом наиболее красиво реализовать это для ряда пользователей.

Использовать sp_send_dbmail
17 окт 13, 14:10    [14985456]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Glory,

ну это понятно. у меня есть таблица содержащая ящики. Каким образом последовательно отправлять всем адресатам?
17 окт 13, 14:12    [14985466]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MedBrat
Каким образом последовательно отправлять всем адресатам?

При помощи цикла, внутри которого будет вызов sp_send_dbmail.
17 окт 13, 14:13    [14985474]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Гость333,

а залепить аргумент из таблицы в виде сроки c ; не более интересно? что наиболее "красиво"?
17 окт 13, 14:14    [14985482]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Glory
Member

Откуда:
Сообщений: 104751
MedBrat
Каким образом последовательно отправлять всем адресатам?

Наверное надо написать код на TSQL
17 окт 13, 14:15    [14985487]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Glory,

ты прав, наверно...
17 окт 13, 14:16    [14985494]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Glory
Member

Откуда:
Сообщений: 104751
MedBrat
а залепить аргумент из таблицы в виде сроки c ; не более интересно? что наиболее "красиво"?

передать всю таблицу в качестве параметра ? Смело и дерзко
Вот только в хелпе написано, что sp_send_dbmail не сможет принять такой параметер
17 окт 13, 14:16    [14985499]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Glory, спасибо. Тогда цикл и никаких вариантов кроме.
17 окт 13, 14:17    [14985505]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MedBrat
а залепить аргумент из таблицы в виде сроки c ; не более интересно? что наиболее "красиво"?

Если нескольким адресатам нужно отправить копию одного и того же письма, то можете и так сделать.
17 окт 13, 14:24    [14985554]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
MedBrat, можно сделать табличку в виде html при желании.
Все так же, в переменную nvarchar(max) кладем текст с разметкой HTML - и в письме адресат получает красивую табличку. Только ISNULL не забудьте, иначе табличка будет "помятой")
17 окт 13, 14:25    [14985557]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
для тупых
Guest
Александр52
MedBrat, можно сделать табличку в виде html при желании.
Все так же, в переменную nvarchar(max) кладем текст с разметкой HTML - и в письме адресат получает красивую табличку. Только ISNULL не забудьте, иначе табличка будет "помятой")


а каким местом это поможет избежать цикла и "залепить аргумент из таблицы в виде сроки c "
17 окт 13, 14:39    [14985652]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Александр52,

спасибо за интересную подсказку!!!
17 окт 13, 14:40    [14985655]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Glory,

может быть мы недопоняли друг друга... в мане написано ровно то, что я пытался сказать.

[ @recipients= ] 'recipients'
Список с разделителями (точки с запятыми), содержащий адреса электронной почты, по которым будут рассылаться сообщения. Список получателей относится к типу varchar(max). Несмотря на то что данный аргумент не является обязательным, необходимо задать как минимум один из аргументов @recipients, @copy_recipients или @blind_copy_recipients, иначе процедура sp_send_dbmail возвращает ошибку.
17 окт 13, 15:37    [14986105]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Glory
Member

Откуда:
Сообщений: 104751
MedBrat
в мане написано ровно то, что я пытался сказать.

Да что вы говорите ! пытался сказать и сказал - две большие разницы
17 окт 13, 15:42    [14986146]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Glory,

мне показалось я написал взять аргумент из таблицы пользователей (столбец) и перечислить его в строковой переменной через ";"...
В следующий раз буду писать яснее. спасибо.
17 окт 13, 15:59    [14986283]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
для тупых, а я и не говорил, что это поможет избежать цикла. Я говорил, что это поможет получить файл в виде таблички.
17 окт 13, 16:13    [14986420]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Glory
Member

Откуда:
Сообщений: 104751
MedBrat
мне показалось я написал взять аргумент из таблицы пользователей (столбец) и перечислить его в строковой переменной через ";"...

Т.е. вы сначала написали в форум свои мысли, а потом пошли читать в хелпе про аргументы процедуры ?
17 окт 13, 16:13    [14986421]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
+
declare @cnt int = 0
while @cnt <> 100
begin
set @cnt+=1
declare @mail nvarchar(max) = (Select top 1   [Email]
  FROM [DB].[dbo].[TMP])
 EXEC msdb.dbo.sp_send_dbmail 
 @profile_name = '1234',
@recipients='111@111.ru',

    @subject = 'Заголовок',
    @body = 
    'Письмо  ',
    @body_format = 'HTML' ;

17 окт 13, 16:16    [14986455]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
поправочка
@recipients=@mail,
17 окт 13, 16:19    [14986473]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
Александр52, ну, я нечто подобное написал. Просто хотел услышать более опытных товарищей.

/* создается таблица с почтовыми ящиками*/
CREATE TABLE #USERMAIL(UM varchar(100))
--DROP TABLE #USERMAIL
INSERT INTO #USERMAIL(UM)
SELECT [User ID] FROM [585$LogIn Log] INNER JOIN sys.syslogins ON UPPER(SUBSTRING(suser_sname(sid),9,100)) = [585$LogIn Log].[User ID] COLLATE Cyrillic_General_CS_AS WHERE [User ID] IN(
SELECT UPPER(SUBSTRING(dbo.StringSIDToLogin([Windows Login].[SID]),9,100)) FROM [Windows Login])
AND [585$LogIn Log].[DT log off]<>'17530101' AND denylogin=0
GROUP BY [User ID]
HAVING MIN(DATEDIFF(DAY,[585$LogIn Log].[DT log off],GETDATE() ))>30

/*считает колво колучателей*/
DECLARE @cmails integer
DECLARE @i int
SET @i=1;
SET @cmails=(SELECT COUNT(*) FROM #USERMAIL)


WHILE (@cmails>=@i)
BEGIN
USE [msdb]

declare @user varchar(50)
SET @user=(SELECT TOP 1 UM FROM #USERMAIL)+'@zolotoy.ru'
--SELECT @user
EXEC sp_send_dbmail
@profile_name = '...',
@recipients = @user,
@copy_recipients='...',
@subject = 'Отключение учетной записи ...',
@body = 'Если вы получили данное сообщение, то Ваша учетная запись была неактивна в течение 30 дней и подлежит отключению.
По вопросу восстановления доступа следует обратиться на почтовый ящик ... или по телефону ...'

DELETE FROM #USERMAIL WHERE #USERMAIL.UM =( SELECT TOP 1 UM FROM #USERMAIL)
SET @i=@i+1;
END
17 окт 13, 16:35    [14986625]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
для тупых
Guest
Александр52
+
declare @cnt int = 0
while @cnt <> 100
begin
set @cnt+=1
declare @mail nvarchar(max) = (Select top 1   [Email]
  FROM [DB].[dbo].[TMP])
 EXEC msdb.dbo.sp_send_dbmail 
 @profile_name = '1234',
@recipients='111@111.ru',

    @subject = 'Заголовок',
    @body = 
    'Письмо  ',
    @body_format = 'HTML' ;


а это что было?
игра "кому больше одинаковых писем придет"?
послать 100 раз одно и то же не поймешь кому?
можно, конечно, добавить order by в top 1, и тогда счастливец будет всего 1, но зато получит 100 писем
17 окт 13, 16:42    [14986695]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
для тупых,

насмешил... в офисе громко ржать нельзя))) ты меня подставил
17 окт 13, 16:46    [14986726]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
MedBrat
Member

Откуда: Санкт-Петербург
Сообщений: 348
коллеги,

не подскажете каким образом переменную загнать в такую конструкцию?
@kick в этом случае недопустим, требуется указывать имя, но поскольку оно меняется с течением отправки нужно как-то... "запеременить".

DENY CONNECT SQL TO @kick
ALTER LOGIN @kick DISABLE
17 окт 13, 16:50    [14986760]     Ответить | Цитировать Сообщить модератору
 Re: Отправка почты  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
для тупых, это значит что прошло 23 минуты до момента вашего ответа. Можно было озадачиться и почитать комментарии ниже.
У вас какая то личная неприязнь к моей персоне. Это тааак мило : )
17 окт 13, 16:52    [14986778]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить