0

そこで、私はさまざまなアイデアを試してメール ニュースレターを送信しようと試みましたが、ほぼ毎回ブロックに遭遇しました。

現在、共有ホスティング環境を使用しており、この環境で安定する必要があります。

バックグラウンド サービスとしてバッチを送信する時間指定されたスケジュールされたシステムを作成したいと思っていましたが、この環境ではそれを行うことができないため、.NET フォーム関数へのタイムアウトの長い AJAX ポストを使用して単純に作成しています。

メールを送信する一般的な機能があり、次のようにデータベースをループしています

For Each email In list
    If Common.isValidEmail(email("email")) Then
        Try
            Common.sendEmail(email("email"), Common.tCase(email("email")), content, subject, "true", "newsletter", "customer")
         Catch ex As Exception
             errorList += email("id") & ","
         End Try
     Else
         Common.changeData("DELETE FROM mailingList WHERE id='" & email("id") & "'")
     End If
Next

ここでは 2 つの潜在的なエラー ケースをキャッチしています。isValidEmail関数は電子メールが適切かどうかをチェックし、メールの送信を試みます。それが失敗した場合は、エラー リストを作成しています。

ただし、サービスが中断されてはダメです。

そのため、各電子メール アドレスのデータベース行に「送信済み」フラグを追加して変更することを検討していますが、これにはループごとにデータベースに書き込む必要があります。これは必死に遅くなりますか?

その後、ドロップアウトするたびに、データベースに戻って、フラグが立てられていないユーザーに再送信できます。

誰もがより良いアイデアを持っていますか?!

長期的には、これをバックグラウンド サービスにしたいと考えており、スケジュールされたバックグラウンド サービスを実行できる Azure に移行することを検討していますが、今のところ、共有環境での回避策が必要です。

4

1 に答える 1

0

はい、個々のレコードがこのバッチの一部としてまだ処理されているかどうかを示すステータスをデータベース レコードに追加することで、ソリューションの信頼性を大幅に向上させることができます。このようにして、関数を時々呼び出すプロセスをセットアップし、各呼び出しごとに X 個のメッセージのみを送信できます。したがって、ホストが 1 時間あたりに送信できるメールの数を調整している場合、各呼び出しで送信されるメールの数と関数を実行する頻度を調整することで、それを簡単に制御できるようになります。

通常、SMTP メッセージの送信はローカル データベースの更新よりも遅いため、すべてのレコードを処理する際の更新速度について気にする必要はありません。あなたのデータベースが違いを生んでいるほど遅い場合、それを実行しているマシンはおそらくリソースが不足している (つまり、より多くの RAM が必要) ため、新しいより高速なマシンを購入する時間がありません。

于 2012-07-13T15:16:29.667 に答える