TSQL - 带有变量问题的msdb.dbo.sp_send_dbmail过程

时间:2013-09-15 09:54:05

标签: sql-server-2008 tsql

过去几天我试图通过以下程序解决发送电子邮件的问题(我省略了一些部分):

 DECLARE     
    [...]    
    @Product            varchar(64),    
    @Subj           varchar(255),    
    [...]    
    SELECT @Subj = 'New ' + @ListType + ' Release in ''' + @Product + ' ' + @Country + ''' ' +  @StatusChange    
    [...]    
    EXEC msdb.dbo.sp_send_dbmail   
    @recipients         = @EMail,   
    @copy_recipients    =  @CCMail,  
    @subject            = @Subj   

    [...]   

如果在@Product变量中是空格(来自其他表的查询),即橙色(白色),则不会发送电子邮件,并显示错误消息,如下所示:
“由于邮件服务器故障,邮件无法发送给收件人。(使用帐户例外邮件发送邮件:无法向邮件服务器发送邮件。(指定的字符串不是主题所需的格式。)” 。如果变量中有空格,似乎无法发送消息,但另一方面,如果我更改查询:

SELECT @Subj = 'New ' + @ListType + ' Release in ''' + ' oranges (white) ' + ' ' + @Country + ''' ' + @StatusChange  

发送电子邮件没问题。另外,如果我将字符串directy分配给@subject,那么发送电子邮件也没有问题。如果变量@Product中没有空格,一切都运行正常......
我已经尝试了几种不同的方法来解决这个问题,但仍然没有成功(并审查了不同论坛上的大量条目......):
1.在其中一个论坛上,我发现检查有关发送电子邮件帐号的SQLAgent条目 - 没有解决问题 2.重新启动服务器/服务 - 没有帮助 3.对@product变量Cast(@product as CHAR(25))进行演员表示同样的问题发生了 4.将@subj变量分配给不同的变量,后者用作@subject - 没有帮助

OS:win 2008 std x86
SQL:2008 std x86(包含所有当前更新)
消息服务器:Exchange 2010(包含所有当前的sp和更新)
Telnet:工作正常......
发送测试邮件没问题。 SQL没有其他问题结束......

感谢您的帮助!

最诚挚的问候,

托马斯

1 个答案:

答案 0 :(得分:1)

问题与特殊字符有关(ASCII 10,13)。

我已经使用REPLACE函数在其中一个变量中更改它。

没有帮助就不可能 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/e20ccd3b-7320-4364-9abb-19b3d1a6f71b/problem-with-sending-emails-using-msdbdbospsenddbmail-procedure-variable-as-the-subject?prof=required

谢谢!