powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Настройка отправки почты с сервера
7 сообщений из 7, страница 1 из 1
Настройка отправки почты с сервера
    #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
Настройка отправки почты с сервера
    #39678191
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
Настройка отправки почты с сервера
    #39678498
beginSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кто может помочь?
...
Рейтинг: 0 / 0
Настройка отправки почты с сервера
    #39678562
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beginSQL,

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

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


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