SQL-сервер sp_send_dbmail

Я использую хранимую процедуру SQL Server sp_send_dbmail для отправки почты через базу данных.

Но когда я выполняю эту процедуру, она отключает процедуру почты базы данных. Я попытался запустить его снова на sysmail_start_sp. Но опять выключается через 7-8 секунд.

Я попытался с кодом ниже:

EXEC msdb..sp_send_dbmail @profile_name = 'Test',
@recipients = '[email protected]',
@subject = 'test mail',
@body_format = 'HTML',
@body = 'test mail',
@from_address = '[email protected]'

Когда я попытался проверить журнал ошибок, я обнаружил следующую ошибку:

Сообщение:

Не удалось прочитать базу данных. Причина: описание ошибки: «Пробелы не допускаются в этом расположении». NULLSource: Информация DatabaseMailEngineStackTrace===================

Также, когда я проверил историю журнала электронной почты sql, я обнаружил эту ошибку:

Почта не в очереди. Почта базы данных остановлена. Используйте sysmail_start_sp для запуска Database Mail.


person user3848036    schedule 22.09.2015    source источник
comment
Какая версия вашего SQL Server? SELECT @@VERSION   -  person JodyT    schedule 22.09.2015
comment
Проверьте @recipients,@copy_recipients,@blind_copy_recipients на наличие пробелов. Проверьте также SELECT * FROM msdb.dbo.sysmail_unsentitems SELECT * FROM sysmail_faileditems на наличие неудачных/повторных попыток и областей поиска.   -  person Lukasz Szozda    schedule 22.09.2015


Ответы (2)


Всякий раз, когда вы пытаетесь отправить тестовую почту из почты базы данных; он выдает сообщение об ошибке ниже:

Сообщение 14641, уровень 16, состояние 1, процедура sp_send_dbmail, почта не поставлена ​​в очередь. Почта базы данных остановлена. Используйте sysmail_start_sp для запуска Database Mail.


  1. Прежде всего убедитесь, что доставка сообщений Service Broker в базах данных включена, выполнив следующую команду в SSMS:

    SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'
    

    Если результат вышеуказанного запроса равен 0, активируйте сервисный брокер.

    Активация Service Broker позволяет доставлять сообщения в базу данных. Конечная точка Service Broker должна быть создана для отправки и получения сообщений за пределами экземпляра.

    Чтобы активировать Service Broker в базе данных, используйте следующую команду:

    USE master ;
    GO
    
    ALTER DATABASE DatabaseName SET ENABLE_BROKER ;
    GO
    
  2. Если Service Broker включен, подтвердите, включена ли Database Mail, выполнив следующие запросы в SQL Server Management Studio:

    sp_configure 'show advanced', 1
    GO
    
    RECONFIGURE
    GO
    
    sp_configure
    GO
    

    Если в результирующем наборе значение run_value равно 1, то Database Mail включен.

  3. Если параметр Database Mail отключен, выполните следующие запросы, чтобы включить его:

    sp_configure 'Database Mail XPs', 1; 
    GO
    
    RECONFIGURE;
    GO
    
    sp_configure 'show advanced', 0; 
    GO
    
    RECONFIGURE;
    GO
    
  4. После включения Database Mail для запуска внешней программы Database Mail используйте указанный ниже запрос в базе данных msdb:

    USE msdb ;       
    EXEC msdb.dbo.sysmail_start_sp;
    
  5. Чтобы убедиться, что внешняя программа Database Mail запущена, выполните запрос, указанный ниже:

    EXEC msdb.dbo.sysmail_help_status_sp;
    
  6. Если запущена внешняя программа Database Mail, проверьте состояние почтовой очереди, используя следующую инструкцию:

    EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
    
person Community    schedule 06.07.2017
comment
Отличный ответ. Можно даже сократить до USE msdb ; EXEC msdb.dbo.sysmail_start_sp; EXEC msdb.dbo.sysmail_help_status_sp;, а затем, если он все еще остановился, может следовать весь вопрос. - person WonderWorker; 29.08.2018

Есть несколько вещей, которые нужно устранить, во-первых, проверьте, включена ли база данных Mail, выполнив следующие действия.

SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'

Если вышеприведенный результат равен 0, активируйте сервис-брокер, следуя это руководство

Если вышеприведенный результат равен 1, проверьте состояние Database Mail, выполните следующую инструкцию:

EXECUTE dbo.sysmail_help_status_sp

Чтобы запустить Database Mail в базе данных почтового узла, выполните следующую команду в базе данных msdb:

EXECUTE dbo.sysmail_start_sp
person Rupesh Boorugu    schedule 12.06.2017