8

リンク付きの小さなhtmlドキュメントを生成し、xp_smtp_sendmailprocを介して送信するprocがあります。リンクはクエリ結果に基づいて生成され、長いです。これはほとんどの場合機能します。ただし、クエリ文字列変数名にスペースが挿入されているためにリンクが壊れることがあります。つまり、&Na me=Johnです。

これはメールクライアントによって異なる場合があります(同じリンクはGmailで機能しますが、スペースが原因でcomcastでは機能しない場合があります。スペースはランダムに挿入されているようです。そのため、壊れたメールリンクスペースごとに他のクエリ文字列変数が壊れている可能性があります。procからPRINTを実行するとリンクはクリーンで、スペースはありません。

これは、メインプロシージャ内で実行されているメールプロシージャのサンプルです(クエリ結果を取得し、@ Messageのhtmlを生成します)。URLをエンコードするかどうかに関係なく、スペースが挿入されているようです。

よろしくお願いします。ここに正しく表示されない場合は、よりクリーンなバージョンのコードを送信できます。

....上記のクエリ結果

SET @Message = NULL
SET @Message = @Message +
+ '<br/>Dear ' + @FirstName + ' ' + @LastName + ','
+ '<br/><br/>Recently you took "' + @Title + '". ' 
+ 'In response to the question "What is it?" ' 
+ 'you responded "' + @Response + '".' 
+ '<br/><br/>Following up on previous mailing'
+ '<br/><br/>Please click on the link below'
+ '<br/><br/><a href="' + @Link + '">Please click here</a>'
+ '<br/><br/>plain text'
+ '<br/><br/>plain text,'
+ '<br/><br/>plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text<br/>
plain text

EXEC @rc = master.dbo.xp_smtp_sendmail
 @FROM         = 'any@any.com',
 @FROM_NAME    = 'Any User',
 @TO           = @Email,
 @priority     = N'NORMAL',
 @subject      = N'My email',
 @message      = @Message,
 @messagefile  = N'',
 @type         = N'text/html', 
 @attachment   = N'',
 @attachments  = N'',
 @codepage     = 0,
 @server       = 'smtp.server.any'
4

4 に答える 4

1

1 - 生成するメッセージの長さを確認し、長さが 4000 文字に近い場合はファイルからの送信に切り替えます。

2 - すべての文または段落の前に cr/lf 文字を挿入します。

3 - タグを開く前後に cr/lf があることを確認します (または、smtp サーバーが好む場合は lf のみ)。

4 - 埋め込まれたリンクの長さを短くすることについて、必要な人に相談してください - それは明らかに持続不可能です

5 - 電子メールを完全にエンコードされたバイナリとして送信できるようにするための smtp サーバーの構成オプションについて尋ねます (MIME ヘッダーと Base64 エンコードが必要です)。

6 - xp_smtp_sendmail のより最近の代替手段、おそらく .NET XP を探します

于 2010-07-14T10:56:35.923 に答える
0

コーディングに改行を入れるのはどうですか。BR は HTML で「キャリッジ リターン」のみを返しますが、ソース自体にはキャリッジ リターンがありません。

于 2010-04-07T15:55:06.907 に答える
0

値とのリンクの長さは?

私の推測では、いくつかの折り返しが発生し、改行がスペースに変更されていると思います。

値の長さが異なるためランダムに見えるため、分割はランダムに発生します。

<br>別の考え:タグだけが必要です。<br />必要ではなく(スペースの有無にかかわらず)、貢献する可能性があります

于 2010-03-20T20:08:33.973 に答える
-1

問題は、マイを Web ページのように扱っていることです。メールは、テキストのみのコンソールの時代に発明されたもので、多くの場合、1 行の長さは 72 文字に制限されています。すべての受信者に適切に配信されるように、HTML を 72 文字以内の行でラップする必要があります。

これを行うには、引用された印刷可能なエンコーディングを使用し、行を最大 72 文字にラップします。

ただし、ジョブのプロシージャを作成する以外に、SQL Server でこれを行う方法がわかりません。ASP FAQのアドバイスに従うことができます。

基本的には、トリックまたはリンク短縮サービスを使用してリンクを短縮するということです。

于 2010-07-25T06:50:31.473 に答える