2010-08-18 24 views
11

Tengo un procedimiento de SQL Server 2008 que envía un correo electrónico a través de sp_send_dbmail.¿Cómo puedo enviar correos electrónicos de texto sin formato (con saltos de línea) usando sp_send_dbmail?

estoy usando el siguiente código:

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

Mi miPerfil está configurado para utilizar el servidor SMTP local, lo que resulta en un archivo .EML en c: \ inetpub \ mailroot \ cola de

Cuando abro uno de esos archivos .eml (ug - lo único que puede abrirlos es Outlook express, mirándolos en cualquier otra cosa solo muestra el cuerpo como un blob codificado en base64.) Parece que está renderizando el resultado como HTML - entonces no estoy seguro si el problema está en el cliente, o

I He intentado poner \ n en el mensaje, pero eso no funcionó. ¿Cómo puedo enviar texto sin formato con saltos de línea y verificar que el resultado final sea el correcto?

Por cierto, no puedo enviar el correo electrónico para probarlo con clientes de correo electrónico real - corp. la red está bloqueada

+0

¿Alguna de estas respuestas ha resuelto su problema? –

+0

@KM - sí. Intento decidir qué aceptar: el tuyo es más elegante y lee mejor, pero Martins también funciona. – chris

Respuesta

7

En realidad, no está insertando ningún salto de línea. Puede incrustarlos directamente en un literal de cadena en SQL Server como se muestra a continuación.

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 enfoque más ordenado podría ser

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

Ambos se producirá un error si myTable contiene más de una fila que está asignando el resultado a una variable escalar.

+0

¡Sorprendentemente, sí! De hecho, puedo poner bloques enteros en un par de citas. – chris

+0

realmente hace que el código parezca funky, solía hacerlo de esa manera. sin embargo, encontré que el 'CHAR (13) + CHAR (10)' funciona mejor con la sangría de consultas y otro código. –

+0

Sí, realmente no funciona muy bien con sangría, ya que el '' 'necesita ir directamente al comienzo de la línea para evitar inyectar una carga completa de espacios sobrantes, pero puede parecer un poco más WYSIWYG donde eso no es un preocupación. –

14

Siempre he usado CHAR(13)+CHAR(10) para crear saltos de línea (que parece funcionar mezclados con los valores nvarchar) en TSQL, por lo que intentar algo como esto:

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 ' 
       [email protected]+ N'It would be nice to have this on a 2nd line ' 
       [email protected]+ N'Below is some data: ' + N' ' + N' ' + ISNULL(@field1,'') + N' ' + ISNULL(@field2 + N' ' ,'') 
       [email protected]+ N'This is the last line' 


PRINT @bodyText 

SALIDA:

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 

este CHAR(13)+CHAR(10) funcionará con msdb.dbo.sp_send_dbmail, envío correos electrónicos formateados usando eso todo el tiempo.

+1

No si está enviando el correo electrónico con el cuerpo como HTML – Fandango68

1

tarde a la fiesta, pero como Fernando68 menciona anteriormente, si se le permite mensajes HTML, ponga @bodyFormat = 'HTML', entonces se puede utilizar para <br/> saltos de línea y que sea tan elegante como desee utilizando todos las etiquetas que obtiene de HTML como saltos de línea, img, fuerte, etc. ...

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