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.

È stato utile?

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' ;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top