そこで、私はさまざまなアイデアを試してメール ニュースレターを送信しようと試みましたが、ほぼ毎回ブロックに遭遇しました。
現在、共有ホスティング環境を使用しており、この環境で安定する必要があります。
バックグラウンド サービスとしてバッチを送信する時間指定されたスケジュールされたシステムを作成したいと思っていましたが、この環境ではそれを行うことができないため、.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 に移行することを検討していますが、今のところ、共有環境での回避策が必要です。