Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Настройка отправки почты с сервера / 7 сообщений из 7, страница 1 из 1
24.07.2018, 12:13
    #39678176
beginSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
Добрый день ребята. Только начинаю изучение SQL. помогите написать робота правильно.

Microsoft SQL Server 2017 (RTM-CU8) (KB4338363) - 14.0.3029.16 (X64) Jun 13 2018 13:35:56 Copyright (C) 2017 Microsoft Corporation Enterprise Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: )

Настроил отправку писем с сервера пользователям, протестил EXEC msdb.dbo.sp_send_dbmail, процедура письма шлет.
У меня есть таблица где сидят зарегистрированные партнеры, но поле email не является обязательным, но в 90% случае это поле заполнено.
Нужно написать робота, который каждые 10 дней с момента регистрации партнера, будет отправлять на email письма с неким уведомлением для них, в течении 30 дней. И если на 30-ый день партнер не выслал документы, его учетка аннулируется, т.е. проставляется флаг удаления в этой же таблице. Если он выслал и его доки прошли верификацию, то наш пользователь ставит ему битовый флаг = доки высланы. И робот перестает ему слать письма. Но по каким-то причина может сломаться отправка почтового сервера и письмо может не уйти, то отправить письмо повторно, независимо прошел 10-ый день или нет.


Вот есть некая таблица зарегистрированных партнеров

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
IF OBJECT_ID('[TestDoc].[A]') IS NOT NULL
  DROP TABLE [TestDoc].[A]

CREATE TABLE [TestDoc].[A]
  (
    [Id]        Int           NOT NULL  IDENTITY(1,1),
    [Partner] varchar(128)    not null,
    [email]    varchar(128)   NULL,
    [DateReg]  Date       NULL, 
    [DELETED] bit NOT NULL,
    [HaveDog] bit NOT NULL, 
   PRIMARY KEY CLUSTERED([Id])
  )
GO

INSERT INTO [TestDoc].[A]
select 1,'Partner1','Partner1@mail.ru','2018-07-01',0,0
UNION
select 2,'Partner2','Partner2@mail.ru','2018-07-11',0,0
UNION
select 3,'Partner3','Partner3@mail.ru','2018-07-22',0,1
UNION
select 4,'Partner4','','2018-07-09',0,0


EXEC msdb.dbo.sp_send_dbmail
	@profile_name = 'aaa.ru',
	@recipients = [TestDoc].[A].email, --Сюда подставлять email партнеров
	@body = N'Уважаемые партнеры. Просьба предоставить оригинал документов до '+dateadd(d,30,dateReg),
	@subject = N'Предоставьте оригинал заявления'



Я так понял логи отправилось письмо или нет, пишутся сюда
Код: sql
1.
SELECT * FROM msdb.dbo.sysmail_mailitems



И также есть системная вьюшка
Код: sql
1.
2.
 
SELECT * FROM msdb.dbo.sysmail_allitems


, где есть sent_status, успешно ли отправлено письмо или нет, в случае не успеха (failed) отправить повторно.

Но какая то тяжелая таблица, не пойму как осуществлять поиск, если по email, я так понял она не индексирована по email И поиск очень тяжелый.

Я понимаю что джоб должен запускаться каждый день на отправку, т.к. у каждого партнера своя дата регистрации, и что нужен некий цикл на проверку таблицы на флаги и проверка в логах отправилось ли письмо успешно.
...
Рейтинг: 0 / 0
24.07.2018, 12:28
    #39678191
Guf
Guf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
beginSQL,

У msdb.dbo.sp_send_dbmail есть исходящий параметр
автор[ @mailitem_id = ] mailitem_id [ OUTPUT ]
Optional output parameter returns the mailitem_id of the message. The mailitem_id is of type int.

А у msdb.dbo.sysmail_allitems есть
авторmailitem_id int Identifier of the mail item in the mail queue.
...
Рейтинг: 0 / 0
24.07.2018, 18:27
    #39678498
beginSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
Кто может помочь?
...
Рейтинг: 0 / 0
24.07.2018, 20:56
    #39678562
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
beginSQL,

Вам же написали, что делать - сохраняйте ID отправленных писем, затем используйте их для проверки статуса.
...
Рейтинг: 0 / 0
26.07.2018, 11:29
    #39679495
beginSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
вопрос по вьюшке
Код: sql
1.
SELECT * FROM msdb.dbo.sysmail_allitems


в случае sent_status - failed , я должен просто тут обновить статус на Retrying ? update msdb.dbo.sysmail_mailitems set sent_status = 1 ? этого будет достаточно?
...
Рейтинг: 0 / 0
26.07.2018, 11:40
    #39679508
beginSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
Владислав Колосов,
Я сохраняю @mailitem_id, во временную таблицу, потом идет сравнение с msdb.dbo.sysmail_allitems , где sent_status <> 'sent', если запись существует, можно ли отправить письмо с этим сохраненным @mailitem_id, повторно? или нужно снова вызывать процедуру sp_send_dbmail ? в случае ошибки отправить письмо на след. день можно ли указать ему дату отправки dateadd(d,1,getdate()) ? Просто джоб срабатывает каждый день, но там есть определенные условия срабатывания, если в этот день некоторые @mailitem_id отвалились с ошибкой, на след день он их не отправит, т.к. они уже не будут удовлетворять условиям.
...
Рейтинг: 0 / 0
26.07.2018, 16:34
    #39679752
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Настройка отправки почты с сервера
beginSQL,

для ответственной рассылки я написал собственную систему, для которой Reporting Services формирует и сохраняет письма в файлы. Система читает файлы из папки и отсылает так, как мне это нужно. Внутренняя система годится лишь для отправки разного рода оповещений и алёртов, т.к. почти не контролируема. Кроме того, необходимо периодически чистить файлы журналов отправки, а их несколько.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Настройка отправки почты с сервера / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]