在sql server 2005中使用sp_send_dbmail时无法看到电子邮件的正文

时间:2010-09-20 15:09:27

标签: sql-server-2005

我创建了一个发送自动电子邮件的程序。电子邮件到达地址,一切似乎工作正常,但身体无法看到。我正在使用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 个答案:

答案 0 :(得分:1)

只是添加到kevchadders回复,当你调用PRINT @bodymsg时,如果它什么都没打印那么你知道这是一个空连接问题。

如果你包装你在ISNULL()函数中附加的每个变量,那么更容易找到导致问题的变量。

例如

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

然后将打印电子邮件的正文,但会有一个缺少的参数。然后你需要找出缺少参数的原因。

答案 1 :(得分:0)

在您执行sp_send_dbmail PRINT @bodymsg参数之前,您就知道数据已正确构建。

e.g。

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

当您向其传递许多参数时,其中一个参数可能是将@bodymsg设置为NULL

答案 2 :(得分:0)

通常当我对sp_send_dbmail有这个问题时,它与传递更多字符或数据有关,然后@body变量可以处理。 SQL Server抛出一个错误,说明数据将被截断。该错误不是致命的,因此存储过程继续运行导致没有正文的电子邮件。