我创建了一个发送自动电子邮件的程序。电子邮件到达地址,一切似乎工作正常,但身体无法看到。我正在使用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'
答案 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抛出一个错误,说明数据将被截断。该错误不是致命的,因此存储过程继续运行导致没有正文的电子邮件。