web-dev-qa-db-ja.com

メールボックスを使用できません。クライアントには、この送信者として送信する権限がありません-初回のみ

ユーザーはボタンをクリックするだけでASP.NET Webアプリケーションからメールを送信できます。私たちのテスト環境では、奇妙なことが起こっています。

アプリケーションが初めてメールを送信しようとすると、例外が発生します。

メールボックスは使用できません。サーバーの応答:5.7.1クライアントには、この送信者として送信する権限がありません

面白いのは、ユーザーがもう一度ボタンをクリックすると(アプリケーションがメールを再送信しようとするため)、機能し、メールが送信されることです。

しばらく待つと再びエラーが表示されますが、もう一度クリックすると問題なくメールが送信されます。新しいメールを送信するのに十分な速さであれば、それでうまくいきます。

これは私たちが使用する(簡略化された)コードです:

Dim smtpClient As New SmtpClient(<smtp mail server goes here>)
smtpClient.UseDefaultCredentials = True
mailMessage.From = New MailAddress(<from address>)
smtpClient.Send(mailMessage)

これは本番環境でも機能します。 Microsoft Exchangeを使用しており、お客様(実稼働環境)も使用しています。

誰かがこれまでに似たようなことをしたことがありますか(最初はエラー、2回目は魅力のように機能します)?

8
Peter

これが数回前に発生するのを私は見たことがあります。これらは大規模な環境でのみ確認されていることに注意してください。単一のDC、単一のExchangeサーバー環境にいる場合、これらは適用されません。

まず、こちらのMS記事をご覧ください http://support.Microsoft.com/kb/89585 。可能性のある状況下では、多くのことがプレイされていることがわかります。

Exchangeサーバーのリレー権限の1つが正しく設定されていません。

これが最も問題の原因です。メールは1回目と2回目の試行で別のルートを使用している可能性がありますが、これは両方のメッセージで馬鹿げたメッセージ追跡のように聞こえる場合があります。同じサーバーを経由するかどうかを確認してください。別のパスが不良パスの設定を確認している場合は、認証されたユーザーのリレーを許可するだけがチェックされていない可能性があります。

AD権限が間違っています

メールの送信元アドレスを持つアカウントの送信者権限が必要です。それが時々機能しているが他の機能はしていない場合、それはメールルーティングの異なるパスであり、それらの間で異なるパーミッションを持っているかもしれません。

認証が正しく機能していません。

スクリプトの最初のインスタンスでは、認証が失敗した可能性があります。この場合、ユーザーが権限を持っていないため、メールは拒否されます。スクリプトの2回目の実行では、認証が成功します。残念ながら私はわかりませんASP上記のコードを理解するか、それを修正する方法についてアドバイスするのに十分なほど十分です。smtpClient.UseDefaultCredentialsは環境に適したコードではない可能性があります。これはサーバーは、ローカルにログオンしたユーザーの資格情報を使用します。サーバーが初めて認証を要求しない場合は、認証されず、送信する権限がない可能性があります。常に認証するコードに変更してみてください。

DCまたはグローバルカタログの1つが古くなっているか、情報が正しくありません。

これはまれですが、ドメインコントローラーの情報が同期していない可能性があります。 ldapまたはadsi editを使用して、fromおよびtoアカウントのサーバー情報を再確認し、すべてのDCで同じであることを確認します。

すべてのインスタンスで、Exchangeサーバーのログを確認し、すべてのフィールドでSMTPログが有効になっていることを確認します。メッセージ追跡を使用して、このメッセージがヒットしているサーバーを正確に確認します。

2
pablo

メールサーバーでSMTP認証が有効になっているように見えますが、コードに含まれていません。このような場合、初めてメッセージを送信しようとすると、効果的に認証が実行されますが、メッセージの送信に失敗します。次にユーザーが認証され、メッセージが通過するとき。

1
John Gardeniers