过去几天我试图通过以下程序解决发送电子邮件的问题(我省略了一些部分):
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
没有其他问题结束......
感谢您的帮助!
最诚挚的问候,
托马斯
答案 0 :(得分:1)
问题与特殊字符有关(ASCII 10,13)。
我已经使用REPLACE函数在其中一个变量中更改它。
谢谢!