Come posso inviare e-mail di testo (con interruzioni di riga) utilizzando sp_send_dbmail?
-
29-09-2019 - |
Domanda
Ho una procedura di SQL Server 2008 che invia email tramite sp_send_dbmail.
Sto utilizzando il seguente codice:
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' ;
Il mio myProfile è impostato per utilizzare il server SMTP locale, che si traduce in un file .eml in c: \ inetpub \ Mailroot \ coda
Quando ho aperto uno di quei file .eml (UG - l'unica cosa che li può aprire è Outlook Express, a guardarli in qualsiasi altra cosa solo mostra il corpo come un blob codificato base64.) Sembra che sta rendendo il risultato come HTML - quindi non sono sicuro se il problema è nel client, o
Ho provato a mettere \ n nel messaggio, ma che non ha funzionato. Come posso inviare testo con interruzioni di riga, e verificare che gli sguardi risultato finale correggere?
A proposito, non posso effettivamente inviare l'e-mail per verificare con i client di posta elettronica reali - corp. di rete è bloccata.
Soluzione
Si sono in realtà non inserire alcuna interruzioni di riga. È possibile incorporare direttamente in un letterale di stringa in SQL Server come di seguito.
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);
O un approccio più ordinato potrebbe essere
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);
Sia genererà un errore se myTable
contiene più di una riga, come si sta assegnando il risultato ad una variabile scalare.
Altri suggerimenti
Ho sempre usato CHAR(13)+CHAR(10)
per creare interruzioni di riga (che sembra funzionare mescolato con valori nvarchar) in TSQL, in modo da provare qualcosa di simile:
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
USCITA:
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
questo CHAR(13)+CHAR(10)
lavorerà con msdb.dbo.sp_send_dbmail
, io mando messaggi di posta elettronica formattati utilizzando tutto il tempo.
in ritardo alla festa, ma come Fernando68 menzioni sopra, se ti è permesso email HTML, insieme @bodyFormat = 'HTML', quindi è possibile utilizzare <br/>
per interruzioni di linea e lo rendono sofisticato come si desidera utilizzare tutti i tag che si ottiene da HTML come interruzioni di linea, img, forti e così via ...
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' ;