Как я могу отправить простое текстовое электронное письмо (с разрывами строк) с помощью SP_SEND_DBMAIL?
-
29-09-2019 - |
Вопрос
У меня есть процедура 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 (UG - единственное, что может их открыть, - это Outlook Express, глядя на них во всем другом, просто показывает тело как кодированную Base64 Blob.) Похоже, что он делает результат как HTML - Так что я не уверен, есть ли проблема в клиенте, или
Я попытался положить n в сообщение, но это не сработало. Как я могу отправить простой текст с разрывами строк и проверить, что конечный результат выглядит правильно?
Кстати, я не могу отправить электронное письмо, чтобы проверить его с реальными почтовыми клиентами - Corp. Сеть заблокирована.
Решение
Вы на самом деле не вставляете какие -либо перерывы на линии. Вы можете встроить их непосредственно в строковую буквальную в 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
, Я посылаю форматированные электронные письма, используя это все время.
Поздно на вечеринку, но как Fernando68 упоминает выше, если вам разрешено HTML -электронные письма, установите @bodyformat = 'html', то вы можете использовать <br/>
Для разрывов линии и сделать это таким же причудливым, как вы хотите, используя все теги, которые вы получаете от HTML, например, линейные перерывы, IMG, сильный и т. Д.
set @bodyText = ( select
'<h1>My Data</h1><p>Here is one line of text<br/>
It would be nice to have this on a 2nd line <br/>
Below is some data: <br/>'
+ field1 + '<br/>'
+ field2 + '<br/>'
+ 'This is the last line</p>'
from myTable )
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'myProfile',
@recipients = @to,
@body = @bodyText,
@body_format = 'HTML',
@subject = 'Testing Email' ;