Question

J'ai une procédure SQL Server 2008 qui envoie des e-mails via sp_send_dbmail.

J'utilise le code suivant:

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

My myProfile est configuré pour utiliser le serveur SMTP local, qui se traduit par un fichier .EML dans c: \ inetpub \ mailroot \ file d'attente

Quand je ouvert un de ces fichiers .eml (ug - la seule chose qui peut les ouvrir est outlook express, les regarder dans quoi que ce soit d'autre montre juste le corps comme un blob codé en base64.) On dirait qu'il est rendu le résultat HTML - donc je ne sais pas si le problème est dans le client, ou

Je l'ai essayé de mettre \ n dans le message, mais cela ne fonctionne pas. Comment puis-je envoyer le texte brut avec des sauts de ligne, et vérifier que le résultat final semble correct?

BTW, je ne peux pas réellement envoyer l'e-mail pour le tester avec les clients de messagerie réel - corp. réseau est verrouillé.

Était-ce utile?

La solution

Vous n'êtes pas insérer réellement de sauts de ligne. Vous pouvez les intégrer directement dans un littéral de chaîne dans SQL Server comme ci-dessous.

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

Ou une approche plus net pourrait être

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

Les deux soulèvera une erreur si myTable contient plus d'une ligne que vous attribuez le résultat à une variable scalaire.

Autres conseils

J'ai toujours utilisé CHAR(13)+CHAR(10) pour créer des sauts de ligne (ce qui semble fonctionner mélangé avec des valeurs nvarchar) dans TSQL, alors essayez quelque chose comme ceci:

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

SORTIE:

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

CHAR(13)+CHAR(10) travaillera avec msdb.dbo.sp_send_dbmail, j'envoyer des e-mails formatés en utilisant tout le temps.

fin à la fête, mais comme Fernando68 mentions ci-dessus, si vous êtes autorisé des e-mails html, ensemble @bodyFormat = « HTML », vous pouvez utiliser <br/> pour les sauts de ligne et le rendre aussi fantaisie que vous voulez utiliser toutes les balises que vous obtenez de HTML comme des sauts de ligne, img, fortes et ainsi de suite ...

  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' ;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top