web-dev-qa-db-ja.com

sp_send_dbmailを使用してプレーンテキストの電子メール(改行付き)を送信するにはどうすればよいですか?

Sp_send_dbmailを介して電子メールを送信するSQLServer2008プロシージャがあります。

私は次のコードを使用しています:

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

MyProfileはローカルのSMTPサーバーを使用するように設定されているため、c:\ inetpub\mailroot\queueに.EMLファイルが作成されます。

それらの.emlファイルの1つを開くと(ug-それらを開くことができるのはOutlook Expressだけで、他のものでそれらを見ると、本体がbase64でエンコードされたblobとして表示されます)、結果をHTMLとしてレンダリングしているように見えます-そのため、問題がクライアントにあるのか、それともクライアントにあるのかわかりません。

メッセージに\ nを入れてみましたが、うまくいきませんでした。改行を含むプレーンテキストを送信し、最終結果が正しいことを確認するにはどうすればよいですか?

ところで、実際に電子メールを送信して、実際の電子メールクライアントでテストすることはできません-corp。ネットワークがロックダウンされています。

15
chris

実際には改行を挿入していません。以下のように、SQLServerの文字列リテラルに直接埋め込むことができます。

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

または、よりきちんとしたアプローチは

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

結果をスカラー変数に割り当てるときにmyTableに複数の行が含まれている場合、どちらもエラーが発生します。

9
Martin Smith

私は常にCHAR(13)+CHAR(10)を使用してTSQLで改行(nvarchar値と混合して機能するようです)を作成しているので、次のようにしてみてください。

_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
_

出力:

_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)は_msdb.dbo.sp_send_dbmail_で動作します。私は、常にそれを使用してフォーマットされた電子メールを送信します。

15
KM.

パーティーに遅れましたが、 Fernando68 上記のように、htmlメールが許可されている場合は、@ bodyFormat = 'HTML'に設定すると、改行に<br/>を使用して作成できます。改行、img、strongなど、HTMLから取得したすべてのタグを使用して好きなだけ凝ってください...

  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' ;
2
Cliff Coulter