Тело письма не видно при использовании sp_send_dbmail в sql server 2005 - PullRequest
0 голосов
/ 20 сентября 2010

Я создаю процедуру для отправки автоматических электронных писем. Письмо попадает на адрес, и все, кажется, работает нормально, но тело не видно. Я использую SQL 2005 и MS Exchange Server 2007. Часть процедуры, которая пишет тело, заключается в следующем.

declare @bodymsg as varchar(1000)
 set @bodymsg = 'The application '
 set @bodymsg = @bodymsg + @appnum
 set @bodymsg = @bodymsg + ' have been auto assign to you by the call center auto assign program.'
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'The borrower information is as follow:'
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'Name: '
 set @bodymsg = @bodymsg + @borrower
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'Email: '
 set @bodymsg = @bodymsg + @borremail
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'Phone: '
 set @bodymsg = @bodymsg + @borrhome
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'Cellphone: '
 set @bodymsg = @bodymsg + @borrcell
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + CHAR(13)
 set @bodymsg = @bodymsg + 'Please contact the borrower ASAP.'

 execute [msdb].[dbo].[sp_send_dbmail]
  @profile_name = 'CallCenter',        
  @recipients   = @email, 
  @subject      = @subjectmsg,
  @body         = @bodymsg,
  @body_format  = 'TEXT'

Ответы [ 3 ]

1 голос
/ 20 сентября 2010

Просто чтобы добавить к ответу kevchadders, когда вы вызываете PRINT @bodymsg, если он вообще ничего не печатает, то вы знаете, что это проблема с нулевым объединением.

Если обернуть каждую переменную, добавляемую в функцию ISNULL (), вам будет легче найти, какая переменная вызывает проблему.

например.

set @bodymsg = @bodymsg + ISNULL(@appnum,'')

Тогда тело письма будет напечатано, но пропущен параметр. Затем вам нужно выяснить, почему этот параметр отсутствует.

0 голосов
/ 06 мая 2016

Обычно, когда у меня возникает эта проблема с sp_send_dbmail, она связана с передачей большего количества символов или данных, чем может обработать переменная @body.SQL Server выдает ошибку о том, что данные будут усечены.Ошибка не является фатальной, поэтому хранимая процедура продолжает выполняться, что приводит к получению электронного письма без тела.

0 голосов
/ 20 сентября 2010

Непосредственно перед тем, как вы выполните sp_send_dbmail ПЕЧАТЬ параметра @bodymsg, чтобы вы знали, что данные построены правильно.

например,

PRINT @bodymsg
execute [msdb].[dbo].[sp_send_dbmail] 
@profile_name = 'CallCenter',         
@recipients   = @email,  
@subject      = @subjectmsg, 
@body         = @bodymsg, 
@body_format  = 'TEXT' 

Когда вы передаете ему несколько параметров, один из них может установить @bodymsg в NULL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...