1

Windows Server 2008R2とIIS7.5.7600を使用しているので、SMTPサービスをインストールして、実行しています。次のPowerShellスクリプトを使用して動作することをテストしました。

$emailFrom = "user@yourdomain.com"
$emailTo = "user@yourdomain.com"
$subject = "your subject"
$body = "your body"
$smtpServer = "your smtp server"
$smtp = new-object Net.Mail.SmtpClient($smtpServer)
$smtp.Send($emailFrom, $emailTo, $subject, $body)

電子メールは、サーバーとして「localhost」を使用して送信されます。

ただし、WCFサービスのweb.configを構成した後:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="Network" from="user@yourdomain.com">
      <network
        host="localhost"
        port="25" 
      />
    </smtp>
  </mailSettings>
</system.net>

コードが呼び出すと、一般的な意味のないエラーが発生します。

var mail = new MailMessage();
mail.To.Add("user@yourdomain.com");
mail.Subject = "[Smtp Client] TEST";
mail.Body = "TEST";
mail.IsBodyHtml = false;
var smtpMail = new SmtpClient();
smtpMail.Send(mail);

私は得る:

Failure sending mail.

    at System.Net.Mail.SmtpClient.Send(MailMessage message)

他に何をチェックすればいいのか途方に暮れていますか?はい、サーバーにアプリケーションサーバーの役割をインストールしました。はい、WCFサービスは正常に機能しています。他のすべてのコードは期待どおりに実行され、電子メールの送信のみが失敗します。IISとローカルSMTPリレーの間に何らかの切断があるように見えますが、この特定の問題について説明しているものは何も見つかりませんでした(smtpを起動して実行できないか、構成を整理できない人のみ) 。

お手数をおかけしますが、よろしくお願いいたします。

4

1 に答える 1

3

したがって、答えはMetabaseでのアクセス許可であることが判明しました。私は以前にこれについて言及しましたが、以前に遭遇したソースはLM \ SMTPSVCパスに読み取りアクセス許可を与えるとだけ言っており、LM \ SMTPSVC \ 1については言及していませんでした(アクセス許可はサブフォルダー/パスにカスケードされると思いました) 。より詳細な説明については、以下を参照してください。

ここから取得

2008 / IIS7 +では、ApplicationPoolIdentityアカウントは、SIDが動的に割り当てられた非表示のアカウントです(ApplicationPoolの起動時に作成および割り当てられます)。ただし、アカウントはローカルマシンのIIS_IUSRSグループの下に(非表示の)ユーザーとして存在します(これにより、パーマに通常のGUIインターフェイスを使用したり、ローカルユーザーグループを指定しながらスクリプトを使用したりできるため、AppPoolsへのアクセス許可を非常に簡単に付与できます)。IIS7.5で実行されているASPサイトが電子メールを送信できない問題を修正するには:

  1. IIS_IUSRSグループの読み取り/書き込みアクセス許可をMailrootフォルダーに付与します(アクセス許可はPickup / etcフォルダーに継承されます)。
  2. 次に、メタベースアクセス許可修飾子を使用し(メタベースエクスプローラーが機能し、2003年のMETAACL.VBSも機能します)、LM\SMTPSVCおよびSMTPSVC\1を開き、メタベースのこれらのブランチに読み取りアクセス許可を持つIIS_IUSRSを追加します。

    cscript metaacl.vbs IIS:// LOCALHOST / SMTPSVC%computername%\ IIS_IUSRS R cscript metaacl.vbs IIS:// LOCALHOST / SMTPSVC / 1%computername%\ IIS_IUSRS R

これらの権限により、すべてのApplicationPoolIdentityユーザーがローカルSMTPサービスを使用して電子メールを作成および送信できるようになります。これは、停止したローカルマシンでSMTPサービスを使用してテストできます。これにより、.EMLファイルがmailroot\pickupフォルダーに表示されます。電子メールの送信がApplicationPoolIdentityではなくNetworkServiceとLocalServiceで機能する理由は、メタベースにはデフォルトでSYSTEMとNetworkServiceの読み取り権限があるためです。これは、AppPoolsをApplicationPoolIdentityとして実行すると、NetworkServiceとして実行するよりもセキュリティが向上する理由のさらに別の例です。アプリケーションには、読み取りまたは書き込みが必要なレジストリエントリ、フォルダー階層、ファイルなどに対する明示的な特権を付与する必要があります。

于 2012-10-04T00:27:08.880 に答える