Как я могу отправить простое текстовое электронное письмо (с разрывами строк) с помощью SP_SEND_DBMAIL?

StackOverflow https://stackoverflow.com/questions/3514650

Вопрос

У меня есть процедура 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' ;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top