17

sp_send_dbmail 経由で電子メールを送信する SQL Server 2008 プロシージャがあります。

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

  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 サーバーを使用するように設定されているため、.EML ファイルが c:\inetpub\mailroot\queue に作成されます。

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

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

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

4

4 に答える 4

22

私はいつも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ます。私は常にそれを使用してフォーマットされた電子メールを送信します。

于 2010-08-18T17:20:13.770 に答える
9

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

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結果をスカラー変数に割り当てているため、複数の行が含まれている場合、どちらもエラーが発生します。

于 2010-08-18T17:20:31.813 に答える