1

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

 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  

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

操作系统:win 2008 std x86
SQL:2008 std x86(包含所有当前更新)
消息服务器:Exchange 2010(包含所有当前 sp 和更新)
Telnet:工作正常...
发送测试电子邮件没问题。从头到尾没有其他问题SQL...

感谢您对此的帮助!

此致,

托马斯

4

1 回答 1

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

谢谢!

于 2013-09-16T08:33:55.407 回答