Frage

Ich habe eine SQL Server 2008 Prozedur, die E-Mail über sp_send_dbmail sendet.

Ich verwende den folgenden Code ein:

  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' ;

Meine MyProfile gesetzt, um den lokalen SMTP-Server zu verwenden, die Ergebnisse in einer EML-Datei in c: \ inetpub \ mailroot \ queue

Wenn ich offen eine dieser EML-Dateien (ug - das einzige, was sie Outlook Express öffnen kann, ist bei ihnen in etwas suchen sonst zeigt nur den Körper als Base64 codiert Blob.) Es sieht aus wie es das Ergebnis der Rendering als HTML - also bin ich nicht sicher, ob das Problem in dem Client ist, oder

Ich habe versucht, setzen \ n in die Nachricht, aber das hat nicht funktioniert. Wie kann ich Klartext mit Zeilenumbrüchen senden, und stellen Sie sicher, dass das Endergebnis aussieht korrigieren?

BTW, kann ich nicht wirklich die E-Mail senden, es zu testen mit echten E-Mail-Clients - corp. Netzwerk gesperrt ist.

War es hilfreich?

Lösung

Sie einfügen eigentlich keine Zeilenumbrüche. Du kannst sie direkt in einem String-Literal in SQL Server als unten.

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);

Oder ein aufgeräumter Ansatz könnte sein,

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); 

Beide werden einen Fehler auslösen, wenn myTable mehr als eine Zeile enthält, wie Sie das Ergebnis in eine skalare Variable zuweisen.

Andere Tipps

Ich habe immer verwendet CHAR(13)+CHAR(10) Zeilenumbrüche zu erstellen (die Arbeit scheint gemischt mit nvarchar-Werten) in TSQL, so etwas wie dies versuchen:

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

OUTPUT:

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

Dieses CHAR(13)+CHAR(10) mit msdb.dbo.sp_send_dbmail arbeiten, ich senden formatierten E-Mails verwenden, dass die ganze Zeit.

spät zur Party, aber wie Fernando68 oben erwähnt, wenn Sie HTML-E-Mails erlaubt sind, Set @bodyFormat = ‚HTML‘, dann können Sie <br/> für Zeilenumbrüche verwenden und es so schick machen, wie Sie alle Tags verwenden möchten, dass Sie von HTML erhalten wie Zeilenumbrüche, img, stark und so weiter ...

  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' ;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top