none
Применение Database Mail. Сообщения "зависают" в состоянии "unsent" RRS feed

  • Вопрос

  • MS SQL Server 2005.
    Настроен account и profile.
    Учетная запись почтового сервера проверена через MS Outlook.
    Тестовое послание из MS SQl Server Management Studio не доходит до адресата.
    Послание через sp_send_dbmail регистрируется в отправляемые msdb.dbo.sysmail_allitems,
    но имеет статус "unsent".
    SQL Server Agent запущен.
    Функция sysmail_start_sp возвращает 1.
    В LOG-е Database Mail пусто...
    Первоначально все эксперименты делал под пользлователем SA.
    Пользователь SA не имеет права отправлять почту и дать ему такое право не возможно.
    Для отправки тестовых сообщений сделал специального пользователя. Дал ему роль "DatabaseMailUserRole". Интересно, что в диалоге отправки тестового сообщения Database Mail от имени этого пользователя долго не видел список настроенных профилей. Давал различные роли (методом тыка). В какой-то момент список профилей появился.
    Из select * from msdb.dbo.sysmail_unsentitems следует, что в каждое тестовое сообщение, созданное от имени нового пользователя, последние изменения вносил пользователь SA !!!????
    Что менялось, зачем? Откуда "вылез" SA ?
    В руководстве по Database Mail указано, что роль DatabaseMailUserRole в базе данных msdb должна быть дана логину, от имени которого SQL Server Agent подключается к SQL Server.
    А как узнать этот login?
    В настройках SQL Server Agent есть login для входа в операционку.
    В списке login-ов сервера есть "OP-042\SQLServer2005SQLAgentUser$OP-042$SUPIR". Ему роль "DatabaseMailUserRole" дана.
    Разбираясь дальше предположил, что login, от имени которого работает Database Mail вероятно соответствует login-у, от "имени" которого подается команда:
    EXEC msdb.dbo.sysmail_start_sp
    Выполнил ее подключившись специально сделанным login-ом.
    В LOG-е Database Mail появилось две записи с одинаковым временем с точностью до секунды:
    LogID = 124 Почтовая очередь запущена под именем входа ... (записано новым login-ом)
    LogID = 125 Activation failure. (записано SA)
    Открыл Log собственно сервера.
    В нем присутствует строка (дата и время с точностью до секунды соответствуют возникновению проблемы, описанной в предыдущем сообщении. LogID нет):
    09/16/2009 11:18:19,spid77s,Unknown,The activated proc [dbo].[sp_sysmail_activate] running on queue msdb.dbo.ExternalMailQueue output the following: 'Error executing extended stored procedure: Invalid Parameter'
    А что за параметр? Какое значение не нравится?
    Сравнил login-ы SA и новый. Мысль дурная, но все все же ... Языки отличаются. Поменял в новом логине russian на english. Выполнил EXEC msdb.dbo.sysmail_start_sp от имени нового логина.
    Почтовая очередь запущена и НИКАКИХ Activation failure !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!=
    А ПОЧТА НЕ УХОДИТ .............
    Из представления select * from msdb.dbo.sysmail_unsentitems
    следует, что отправитель новый логин (там колонка называется send_request_user),
    но "последнее слово" в сообщении (колонка last_mod_user) опять осталось за SA.
    Все, дальше мыслей нет ...
    Куда смотреть?
    Спасибо.
    16 сентября 2009 г. 9:35

Ответы

  • Могу предложить настроить все заново:
    ---
    USE master
    GO
    
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE 
    GO
    
    /****** Object:  Operator [MS-SQL-Server-Admins] ******/
    IF  EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'MS-SQL-Server-Admins')
    EXEC msdb.dbo.sp_delete_operator @name=N'MS-SQL-Server-Admins'
    GO
    
    USE [msdb]
    GO
    
    /****** Object:  Operator [MS-SQL-Server-Admins] ******/
    EXEC msdb.dbo.sp_add_operator @name=N'MS-SQL-Server-Admins', 
    		@enabled=1, 
    		@weekday_pager_start_time=0, 
    		@weekday_pager_end_time=235959, 
    		@saturday_pager_start_time=0, 
    		@saturday_pager_end_time=235959, 
    		@sunday_pager_start_time=0, 
    		@sunday_pager_end_time=235959, 
    		@pager_days=127, 
    		@email_address=N'logs@domen.ru', 
    		@category_name=N'[Uncategorized]'
    GO
    /*****************************************************************************************/
    
    -- Компонент Database Mail
    EXECUTE sp_configure 'show advanced options',1
    RECONFIGURE
    EXECUTE sp_configure 'Database Mail XPs',1
    RECONFIGURE
    EXEC sp_configure 'default trace enabled', 0
    RECONFIGURE
    EXECUTE sp_configure 'show advanced options',0
    RECONFIGURE
    GO
    DECLARE @email_address nvarchar(50)
    SELECT	@email_address = @@servername + '-MSSQL@domen.ru'
    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'Administrator',
        @description = 'Mail account for administrative e-mail.',
    	@replyto_address = 'LOGS@domen.ru',
        @email_address = @email_address,
        @display_name = @email_address,
        @mailserver_name = 'wz-exch1.ad.domen.ru',
    	@mailserver_type = 'SMTP',
    	@port = 25,
    	@use_default_credentials = 0;
    GO
    EXECUTE msdb.dbo.sysmail_add_profile_sp
           @profile_name = 'AlertProfile',
           @description = 'Profile used for administrative mail.' ;
    GO
    EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'AlertProfile',
        @account_name = 'Administrator',
        @sequence_number = 1 ;
    GO
    EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
        @principal_name = 'public',
        @profile_name = 'AlertProfile',
        @is_default = 1 ;
    GO
    /*****************************************************************************************/
    USE [msdb]
    GO
    EXEC msdb.dbo.sp_set_sqlagent_properties @email_save_in_sent_folder=1
    GO
    EXEC master.dbo.xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
    , N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
    , N'UseDatabaseMail'
    , N'REG_DWORD', 1
    GO
    EXEC master.dbo.xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
    , N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
    , N'DatabaseMailProfile'
    , N'REG_SZ'
    , N'AlertProfile'
    GO
    EXEC master.dbo.sp_MSsetalertinfo @failsafeoperator=N'MS-SQL-Server-Admins', 
    		@notificationmethod=1
    GO
    
    ---
    соответственно измените адреса email, почтового сервера.

    MCITP: Database Administrator
    • Помечено в качестве ответа АлексейАБ 17 сентября 2009 г. 5:25
    16 сентября 2009 г. 13:44
  • Как правильно устранять подобные проблемы подробно описано тут: http://msdn.microsoft.com/ru-ru/library/ms188663.aspx

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

    16 сентября 2009 г. 14:35
  • Покажите, что вернёт этот сценарий:

    EXECUTE msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    --EXECUTE sp_addrolemember @rolename = 'DatabaseMailUserRole',@membername = '.......';
    EXECUTE msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
    EXECUTE msdb.dbo.sysmail_help_account_sp;
    EXECUTE msdb.dbo.sysmail_help_profile_sp;
    EXECUTE msdb.dbo.sysmail_help_profileaccount_sp @profile_name = 'AlertProfile'
    EXECUTE msdb.dbo.sysmail_help_principalprofile_sp;
    SELECT * FROM msdb.dbo.sysmail_event_log
    SELECT * FROM msdb.dbo.sysmail_allitems
    SELECT * FROM msdb.dbo.sysmail_faileditems
    GO

    • Помечено в качестве ответа АлексейАБ 17 сентября 2009 г. 8:37
    17 сентября 2009 г. 7:17
  • Проверил доступность SMTP-сервера ping-ом.
    Нормально.
    Этого недостаточно.
    Позвольте нам узнать реакцию на команду
    TELNET АДРЕС 25
    , где АДРЕС - это сетевое имя почтового сервера или IP. Для чистоты эксперимента напишите адрес так, как вы его указали в профиле DatabaseMail.

    MCITP: Database Administrator
    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:50
    17 сентября 2009 г. 14:50
  • SQL Server обновлялся, т.е. какая версия?
    Пробовали службу SQL Server тоже запускать от доменной записи?

    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:49
    18 сентября 2009 г. 7:58
  • Похоже, что служба брокера не активирует почтового клиента. Проверьте вот это: http://msdn.microsoft.com/ru-ru/library/ms189959.aspx
    Да и эндпоинт создать не помешает...

    USE master
    GO

    CREATE ENDPOINT SBEndpoint
      STATE = STARTED
      AS TCP
        (
           LISTENER_IP = ALL,
           LISTENER_PORT = 9669
        )
      FOR SERVICE_BROKER
        (
           AUTHENTICATION = WINDOWS,
           MESSAGE_FORWARDING = DISABLED
        )
    GO

    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:49
    18 сентября 2009 г. 13:38

Все ответы

  • Могу предложить настроить все заново:
    ---
    USE master
    GO
    
    EXEC sp_configure 'show advanced options', 1
    RECONFIGURE WITH OVERRIDE 
    GO
    
    /****** Object:  Operator [MS-SQL-Server-Admins] ******/
    IF  EXISTS (SELECT name FROM msdb.dbo.sysoperators WHERE name = N'MS-SQL-Server-Admins')
    EXEC msdb.dbo.sp_delete_operator @name=N'MS-SQL-Server-Admins'
    GO
    
    USE [msdb]
    GO
    
    /****** Object:  Operator [MS-SQL-Server-Admins] ******/
    EXEC msdb.dbo.sp_add_operator @name=N'MS-SQL-Server-Admins', 
    		@enabled=1, 
    		@weekday_pager_start_time=0, 
    		@weekday_pager_end_time=235959, 
    		@saturday_pager_start_time=0, 
    		@saturday_pager_end_time=235959, 
    		@sunday_pager_start_time=0, 
    		@sunday_pager_end_time=235959, 
    		@pager_days=127, 
    		@email_address=N'logs@domen.ru', 
    		@category_name=N'[Uncategorized]'
    GO
    /*****************************************************************************************/
    
    -- Компонент Database Mail
    EXECUTE sp_configure 'show advanced options',1
    RECONFIGURE
    EXECUTE sp_configure 'Database Mail XPs',1
    RECONFIGURE
    EXEC sp_configure 'default trace enabled', 0
    RECONFIGURE
    EXECUTE sp_configure 'show advanced options',0
    RECONFIGURE
    GO
    DECLARE @email_address nvarchar(50)
    SELECT	@email_address = @@servername + '-MSSQL@domen.ru'
    EXECUTE msdb.dbo.sysmail_add_account_sp
        @account_name = 'Administrator',
        @description = 'Mail account for administrative e-mail.',
    	@replyto_address = 'LOGS@domen.ru',
        @email_address = @email_address,
        @display_name = @email_address,
        @mailserver_name = 'wz-exch1.ad.domen.ru',
    	@mailserver_type = 'SMTP',
    	@port = 25,
    	@use_default_credentials = 0;
    GO
    EXECUTE msdb.dbo.sysmail_add_profile_sp
           @profile_name = 'AlertProfile',
           @description = 'Profile used for administrative mail.' ;
    GO
    EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
        @profile_name = 'AlertProfile',
        @account_name = 'Administrator',
        @sequence_number = 1 ;
    GO
    EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
        @principal_name = 'public',
        @profile_name = 'AlertProfile',
        @is_default = 1 ;
    GO
    /*****************************************************************************************/
    USE [msdb]
    GO
    EXEC msdb.dbo.sp_set_sqlagent_properties @email_save_in_sent_folder=1
    GO
    EXEC master.dbo.xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
    , N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
    , N'UseDatabaseMail'
    , N'REG_DWORD', 1
    GO
    EXEC master.dbo.xp_instance_regwrite N'HKEY_LOCAL_MACHINE'
    , N'SOFTWARE\Microsoft\MSSQLServer\SQLServerAgent'
    , N'DatabaseMailProfile'
    , N'REG_SZ'
    , N'AlertProfile'
    GO
    EXEC master.dbo.sp_MSsetalertinfo @failsafeoperator=N'MS-SQL-Server-Admins', 
    		@notificationmethod=1
    GO
    
    ---
    соответственно измените адреса email, почтового сервера.

    MCITP: Database Administrator
    • Помечено в качестве ответа АлексейАБ 17 сентября 2009 г. 5:25
    16 сентября 2009 г. 13:44
  • Как правильно устранять подобные проблемы подробно описано тут: http://msdn.microsoft.com/ru-ru/library/ms188663.aspx

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

    16 сентября 2009 г. 14:35
  • Могу предложить настроить все заново:
    ---
    Логично!

    Указал свои значения параметров и выполнил предложмнный скрипт на другом экземпляре БД. Там Database Mail еще не использовали. Отправка тестовых сообщений работает!

    В скрипте я не понял назначение команды создания "оператора" и его применения в sp_MSsetalertinfo. Вообще столкнулся с этим понятием первый раз. Самоучка я, неуч тоесть :(
    Отправка почты осуществляется подсистемой Alert ? А разве не SQL Server Agent?
    Где бы узнать программную структуру SQL Server-а. Понятно, что Database Mail только регистрирует почтовые сообщения. А какая подсистема, служба, сервис их отправляют?
    С этим буду разбираться позже.

    Для тех кто воспользуется предложенным выше скриптом следующая информация:
    1. Отправку сообщения с сервера блокировал антивирус. Обратите внимание на это в вашем случае.
    2. Доступ к почтовому ящику происходит от имени анонимного пользователя. Полагаю большинство почтовых серверов такого пользователя "отфутболят". В моем случае до приема сообщения почтовым сервером дело еще не дошло.

    А теперь самое интересное :(
    На нужном экземпляре БД применение указанного скрипта результата НЕ дало.
    Есть нечто, мешающее отправке сообщений.
    По аналогии с командами скрипта нашел нужные команды и удалил все свои экспериментальные профили и аккаунты. Интересно, что из SQL Server Manager это сделать не получалось.
    Оставил только те, что созданы скриптом.

    Вопрос остается в силе!
    17 сентября 2009 г. 5:45
  • Как правильно устранять подобные проблемы подробно описано тут: http://msdn.microsoft.com/ru-ru/library/ms188663.aspx

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


    Текстом по ссылке пользовался пытаясь решить проблему самостоятельно. Там много полезной информации. НО, либо я плохо читал, либо плохо выполнял, либо что-то еще не учтено.
    Сейчас мне бы очень хотелось понять, что не работает. Какая служба, сервис, функция? Сообщения в БД зарегистрированы, но их ничто не отправляет. А что\кто это должен делать? Где лог этого сервиса?

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

    Цитата "убедитесь, что внешняя программа компонента Database Mail находится в верном каталоге и учетная запись службы SQL Server имеет разрешения на ее запуск."
    Программа "Database Mail" находится где требуется.
    А как проверить разрешение учетной записи службы SQL Server на запуск? Я взял и просто запустил программу войдя на сервер с той самой учетной записью. Аварийных сообщений операционной системы не получил.
    17 сентября 2009 г. 6:15
  • Покажите, что вернёт этот сценарий:

    EXECUTE msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    --EXECUTE sp_addrolemember @rolename = 'DatabaseMailUserRole',@membername = '.......';
    EXECUTE msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
    EXECUTE msdb.dbo.sysmail_help_account_sp;
    EXECUTE msdb.dbo.sysmail_help_profile_sp;
    EXECUTE msdb.dbo.sysmail_help_profileaccount_sp @profile_name = 'AlertProfile'
    EXECUTE msdb.dbo.sysmail_help_principalprofile_sp;
    SELECT * FROM msdb.dbo.sysmail_event_log
    SELECT * FROM msdb.dbo.sysmail_allitems
    SELECT * FROM msdb.dbo.sysmail_faileditems
    GO

    • Помечено в качестве ответа АлексейАБ 17 сентября 2009 г. 8:37
    17 сентября 2009 г. 7:17
  • Покажите, что вернёт этот сценарий:

    EXECUTE msdb.sys.sp_helprolemember 'DatabaseMailUserRole';
    --EXECUTE sp_addrolemember @rolename = 'DatabaseMailUserRole',@membername = '.......';
    EXECUTE msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
    EXECUTE msdb.dbo.sysmail_help_account_sp;
    EXECUTE msdb.dbo.sysmail_help_profile_sp;
    EXECUTE msdb.dbo.sysmail_help_profileaccount_sp @profile_name = 'AlertProfile'
    EXECUTE msdb.dbo.sysmail_help_principalprofile_sp;
    SELECT * FROM msdb.dbo.sysmail_event_log
    SELECT * FROM msdb.dbo.sysmail_allitems
    SELECT * FROM msdb.dbo.sysmail_faileditems
    GO


    1. EXECUTE msdb.sys.sp_helprolemember 'DatabaseMailUserRole';

    DbRole MemberName
    DatabaseMailUserRole NT AUTHORITY\SYSTEM
    DatabaseMailUserRole OP-042\SQLServer2005SQLAgentUser$OP-042$SUPIR
    DatabaseMailUserRole supir


    2. EXECUTE msdb.dbo.sysmail_help_queue_sp @queue_type = 'Mail';
    queue_type length state last_empty_rowset_time last_activated_time
    mail   30 NOTIFIED 16.09.2009 6:17 16.09.2009 6:17


    3. EXECUTE msdb.dbo.sysmail_help_account_sp;
    account_id name description email_address display_name replyto_address servertype servername port username use_default_credentials enable_ssl
      6 SUPIR_mail_acc Mail account for SUPIR e-mail. sqlmail@ufa.ru sqlmail@ufa.ru sqlmail@ufa.ru SMTP srv20504.ufa.ru   25 null ЛОЖЬ ЛОЖЬ

    4. EXECUTE msdb.dbo.sysmail_help_profile_sp;
    profile_id name description
      10 SUPIR_mail_Profile Profile used for SUPIR mail.

    5. EXECUTE msdb.dbo.sysmail_help_profileaccount_sp @profile_name = 'SUPIR_mail_Profile'
    profile_id profile_name account_id account_name sequence_number
      10 SUPIR_mail_Profile   6 SUPIR_mail_acc   1

    6. EXECUTE msdb.dbo.sysmail_help_principalprofile_sp;
    principal_id principal_name profile_id profile_name is_default
      2 guest   10 SUPIR_mail_Profile ИСТИНА

    7. SELECT * FROM msdb.dbo.sysmail_event_log
      126 information 16.09.2009 12:16 The mail queue was started by login "sa". null null null 16.09.2009 12:16 sa
      127 information 16.09.2009 12:17 The mail queue stopped by login "sa". null null null 16.09.2009 12:17 sa
      128 information 16.09.2009 12:17 Почтовая очередь запущена под именем входа "supir". null null null 16.09.2009 12:17 supir
      129 error 16.09.2009 12:17 Activation failure. null null null 16.09.2009 12:17 sa
      130 information 16.09.2009 12:20 Почтовая очередь запущена под именем входа "supir". null null null 16.09.2009 12:20 supir


    8. SELECT * FROM msdb.dbo.sysmail_allitems
    mailitem_id profile_id recipients copy_recipients blind_copy_recipients subject body body_format importance sensitivity file_attachments attachment_encoding query execute_query_database attach_query_result_as_file query_result_header query_result_width query_result_separator exclude_query_output append_query_error send_request_date send_request_user sent_account_id sent_status sent_date last_mod_date last_mod_user
      70   4 AronovichAB@ufa.ru null null Database Mail Test ---222 This is a test e-mail sent from Database Mail. TEXT NORMAL NORMAL null MIME null null ЛОЖЬ ИСТИНА   256   ЛОЖЬ ЛОЖЬ 16.09.2009 12:29 supir null unsent null 16.09.2009 12:29 sa
      71   4 AronovichAB@ufa.ru null null Database Mail Test    profile 2 This is a test e-mail sent from Database Mail. TEXT NORMAL NORMAL null MIME null null ЛОЖЬ ИСТИНА   256   ЛОЖЬ ЛОЖЬ 16.09.2009 19:37 supir null unsent null 16.09.2009 19:37 sa
      72   10 AronovichAB@ufa.ru null null Database Mail Test This is a test e-mail sent from Database Mail. TEXT NORMAL NORMAL null MIME null null ЛОЖЬ ИСТИНА   256   ЛОЖЬ ЛОЖЬ 17.09.2009 10:52 sa null unsent null 17.09.2009 10:52 sa
      73   10 AronovichAB@ufa.ru null null Database Mail Test This is a test e-mail sent from Database Mail. TEXT NORMAL NORMAL null MIME null null ЛОЖЬ ИСТИНА   256   ЛОЖЬ ЛОЖЬ 17.09.2009 11:05 sa null unsent null 17.09.2009 11:05 sa


    9. SELECT * FROM msdb.dbo.sysmail_faileditems
        Нет записей.








    17 сентября 2009 г. 9:02
  • Для profile_id и account_id нет значений, это в самом деле так?

    Во время тестов отключали антивирус?

    Выдержка из документации:
    Состояние unsent означает, что внешняя программа компонента Database Mail еще не обработала электронное сообщение. Иногда она не очень быстро это делает, скорость их обработки зависит от параметров сети, времени ожидания перед повтором, объема сообщений и ресурсов SMTP-сервера. Если проблема остается, попробуйте отсылать сообщения из нескольких профилей и с нескольких SMTP-серверов.

    Я бы предложил попробовать ещё разные способы авторизации SMTP.

    17 сентября 2009 г. 10:03
  • Для profile_id и account_id нет значений, это в самом деле так?

    Во время тестов отключали антивирус?

    Выдержка из документации:
    Состояние unsent означает, что внешняя программа компонента Database Mail еще не обработала электронное сообщение. Иногда она не очень быстро это делает, скорость их обработки зависит от параметров сети, времени ожидания перед повтором, объема сообщений и ресурсов SMTP-сервера. Если проблема остается, попробуйте отсылать сообщения из нескольких профилей и с нескольких SMTP-серверов.

    Я бы предложил попробовать ещё разные способы авторизации SMTP.


    account_id, profile_id есть. В приведенных выше табличках значения этих колонок отформатированы по правому краю. Получилось не наглядно.

    Анивирус работал. На другой машине уже наблюдал его действие. Блокируется отправка сообщения и статус его становится "failed".

    Нескольких SMTP у меня нет ...
    Под разными учетными записями с разными вариантами авторизации пробовал. Может что-то делал не верно, но не помогло. Опять же, до SMTP еще очень далеко! Пусть для начала сообщение будет отправлено и блокировано антивирусом!

    17 сентября 2009 г. 10:19
  • проверьте, с сервера баз данных доступен почтовый сервер?
    выполните в командной строке:
    telnet имя_или_IP_почтового_сервера 25


    MCITP: Database Administrator
    17 сентября 2009 г. 10:21
  • проверьте, с сервера баз данных доступен почтовый сервер?
    выполните в командной строке:
    telnet имя_или_IP_почтового_сервера 25


    MCITP: Database Administrator
    ...и ещё отключите сетевой экран, если таковой имеется.
    17 сентября 2009 г. 10:44
  • Ильгиз и Александ (простите, не знаю отчеств), еще раз спасибо за помощь.

    С антивирусом, экраном и т.д. - проблем нет. Там разберутся соответствующие специалисты и что делать они знают.

    Хотел бы обратить ваши внимание на тот факт, что не происходит отправка сообщений!
    До соединения с SMTP-сервером дело просто не доходит.
    На другой машине после настройки предложенным скриптом отправка сообщения выполнилась. Да, сообщение адресату не дошло и в журнале MS SQL Server сообщение имеет статус "failed". Оно ОТПРАВЛЯЛОСЬ !!!

    А вот на другом сервере сообщения "unsent" и все ....

    17 сентября 2009 г. 12:46
  • Дык, мы же Вам и предлагаем выяснить причину, по которой отправка не происходит. Т.е. статус UNSENT говорит о том, что служба Database Mail работает, но не отправляет сообщения. Например, так может быть, если недоступен почтовый сервер, или брандмауэр не даёт выйти в сеть...
    Попробуйте всётаки сделать то, что просил Ильгиз?

    17 сентября 2009 г. 13:41
  • Проверил доступность SMTP-сервера ping-ом.
    Нормально.
    Да и как иначе, если я с сервера Outlook-ом проверяю учетную запись.
     
    Я понял и так написано в тексте на который выше была сслыка, что "unsent" состояние имеют сообщения, которые стоят в очереди и не обработаны. Это подтверждается экспериментом на втором сервере. Повторюсь, там сообщение до адресата не дошло, но была попытка его отправить. Это зафиксировал антивирус, это зафиксировал сам SQL Server, записав в сообщение состояние "failed".
    Статус "UNSENT" говорит о том, что работает часть СЕРВЕРА, отвечающая за регистрацию сообщения и постановку его в очередь. А вот сохранение состояния "UNSENT" бесконечно долго (есть сообщения 2008 года), говорит о том, что отправляющая часть подсистемы Database Mail - НЕ работает. Отправлять должна внешняя программа (exe), физическое положение которой меня выше просили проверить. Но она не "висит" в памяти постоянно. Она активируется каким-то сервисом по какому-то событию, отправляет сообщения из очереди и "живет" в памяти некоторое заданное время после этого. А потом выгружается до новой активации.
    В моем случае не происходит это активирующее событие, либо не активирована служба, запускающая внешнюю программу (exe) или вся эта цепочка где-то прерывается по причине проблем с правами доступа, каких-то иных проблем.
    Вот только участников этий цепочки и места, где они оставляют следы (логи, протоколы ...) я не знаю.
    Полдскажите, пожалуйста.
    17 сентября 2009 г. 14:03
  • Проверил доступность SMTP-сервера ping-ом.
    Нормально.
    Этого недостаточно.
    Позвольте нам узнать реакцию на команду
    TELNET АДРЕС 25
    , где АДРЕС - это сетевое имя почтового сервера или IP. Для чистоты эксперимента напишите адрес так, как вы его указали в профиле DatabaseMail.

    MCITP: Database Administrator
    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:50
    17 сентября 2009 г. 14:50
  • Проверил доступность SMTP-сервера ping-ом.
    Нормально.
    Этого недостаточно.
    Позвольте нам узнать реакцию на команду
    TELNET АДРЕС 25
    , где АДРЕС - это сетевое имя почтового сервера или IP. Для чистоты эксперимента напишите адрес так, как вы его указали в профиле DatabaseMail.

    MCITP: Database Administrator

    Реакция на команду Telnet ....

    220 mail.ufa.ru Mail Server Fri 18 Sep 2009 10:33:33 +0600
    18 сентября 2009 г. 4:38
  • Продолжая "рыться" в SQL Servere сегодня перезапустил SQL Agent-а.
    В протоколе Agent-а появлилось:
    Error,,[364] The Messenger service has not been started - NetSend notifications will not be sent,,,,,

    Случайно, не Messenger активирует внешнюю прогу DatabaseMail?

    Может эта информация поможет ....

    18 сентября 2009 г. 5:43
  • Продолжая "рыться" в SQL Servere сегодня перезапустил SQL Agent-а.
    В протоколе Agent-а появлилось:
    Error,,[364] The Messenger service has not been started - NetSend notifications will not be sent,,,,,

    Случайно, не Messenger активирует внешнюю прогу DatabaseMail?

    Может эта информация поможет ....


    Проверил лог сервера, где потправка сообщений работает.
    Там такая же ошибка Error,,[364] The Messenger ...
    Получается Messenger не при чем.
    18 сентября 2009 г. 6:57
  • SQL Server обновлялся, т.е. какая версия?
    Пробовали службу SQL Server тоже запускать от доменной записи?

    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:49
    18 сентября 2009 г. 7:58
  • Изначально основной и Agent сервисы SQL Server-а на проблемной машине работали под моей доменной записью. А вот на машине, где отправка работает - под системной учетной записью.
    Сегодня поставил эксперимент - перевел сервисы проблемного сервера под системную учетную запись.
    Эффекта сразу не увидел.
    Не понимаю что значит "системная учетная запись". На машине их 7 штук. Посмотрел учетные данные регистрируемых сообщений. Получается, что учетная запись - моя же. Та с которой я вхожу на машину. Бред какой-то ...
    Ну да ладно ...
    Далее "сверил" параметры своего пользователя на машинах.
    На проблемной такого в списках не значится. Добавил и дал ему права локального админа.
    Ничего не изменилось.

    А потом взял и запустил ручками DatabaseMail90.exe.
    О ЧУДО, сообщения обработались !!!!!!!!!!!!!!!!!
    Если раньше, при проверке прав на запуск DatabaseMail90.exe, окно программы мелькнуло и пропало, то теперь оно "жило" на экране достаточно долго.
    В логе антивируса появилось две записи о блокировке. Не понятно почему только две. Ожидающих записей больше десятка накопилось.
    Вот только статус записей в sysmail_allitems не изменился.
    "Кто же" таки должен запускать DatabaseMail90.exe? Где его лог?
    Подскажите что знаете об этом "звере"?

    18 сентября 2009 г. 11:38
  • Похоже, что служба брокера не активирует почтового клиента. Проверьте вот это: http://msdn.microsoft.com/ru-ru/library/ms189959.aspx
    Да и эндпоинт создать не помешает...

    USE master
    GO

    CREATE ENDPOINT SBEndpoint
      STATE = STARTED
      AS TCP
        (
           LISTENER_IP = ALL,
           LISTENER_PORT = 9669
        )
      FOR SERVICE_BROKER
        (
           AUTHENTICATION = WINDOWS,
           MESSAGE_FORWARDING = DISABLED
        )
    GO

    • Помечено в качестве ответа АлексейАБ 22 сентября 2009 г. 4:49
    18 сентября 2009 г. 13:38
  • Добрый день, Алексей.

    Долго бился с этой проблемой и наткнулся на этот пост. Проделал все, что здесь сказано, но результат - 0. Потом решил руками запустить DatabaseMail.exe (MS SQL Server 2016) и появилось сообщение о нехватке .NET Framework 3.5. Доставил этот компонент, перезапустил SQL Agent и вуаля!

    26 июня 2017 г. 11:58