У меня есть процедура SQL Server 2008, которая отправляет электронную почту через sp_send_dbmail.
Я использую следующий код:
set @bodyText = ( select
N'Here is one line of text ' +
N'It would be nice to have this on a 2nd line ' +
N'Below is some data: ' +
N' ' +
N' ' +
field1 +
N' ' +
field2 +
N' ' +
N'This is the last line'
from myTable )
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'myProfile',
@recipients = @to,
@body = @bodyText,
@body_format = 'TEXT',
@subject = 'Testing Email' ;
Мой myProfile настроен на использование локального сервера SMTP, что приводит к. EML-файл в c: \ inetpub \ mailroot \ queue
Когда я открываю один из этих файлов .eml (единственное, что может открыть их, это outlook express, при взгляде на них во всем остальном просто отображается тело как base64). закодированный блоб.) похоже, что он отображает результат в виде HTML - поэтому я не уверен, что проблема в клиенте, или
я пытался вставить \ n в сообщение, но это не сработало. Как я могу отправить простой текст с разрывами строк и убедиться, что конечный результат выглядит правильно?
Кстати, я не могу отправить электронное письмо, чтобы проверить его с реальными почтовыми клиентами - корп. сеть заблокирована.
Фактически вы не вставляете никаких разрывов строки. Вы можете встроить их непосредственно в строковый литерал в SQL Server, как показано ниже.
SET @bodyText = (SELECT N'Here is one line of text
It would be nice to have this on a 2nd line
Below is some data:
' + field1 + N'
' + field2 + N'
' + N'This is the last line'
FROM myTable);
Или более аккуратный подход:
DECLARE @Template NVARCHAR(max) =
N'Here is one line of text
It would be nice to have this on a 2nd line
Below is some data:
##field1##
##field2##
This is the last line';
SET @bodyText = (SELECT REPLACE(
REPLACE(@Template,
'##field1##', field1),
'##field2##', field2)
FROM myTable);
Оба вызовут ошибку, если myTable
содержит более одной строки, когда вы присваиваете результат скалярной переменной.
Я всегда использовал CHAR (13) + CHAR (10)
для создания разрывов строк (которые, кажется, работают вместе со значениями nvarchar) в TSQL, поэтому попробуйте примерно так:
DECLARE @CRLF char(2)
,@bodyText nvarchar(max)
,@field1 nvarchar(10)
,@field2 nvarchar(10)
SELECT @CRLF=CHAR(13)+CHAR(10)
,@field1='your data'
,@field2='and more'
set @bodyText =
N'Here is one line of text '
+@CRLF+ N'It would be nice to have this on a 2nd line '
+@CRLF+ N'Below is some data: ' + N' ' + N' ' + ISNULL(@field1,'') + N' ' + ISNULL(@field2 + N' ' ,'')
+@CRLF+ N'This is the last line'
PRINT @bodyText
ВЫВОД:
Here is one line of text
It would be nice to have this on a 2nd line
Below is some data: your data and more
This is the last line
этот CHAR (13) + CHAR (10)
будет работать с msdb.dbo.sp_send_dbmail
, я отправляю отформатированные электронные письма, используя это все время.