Wie kann ich Klartext E-Mail (mit Zeilenumbrüchen) mit sp_send_dbmail schicken?
-
29-09-2019 - |
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.
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' ;