2

会社用の Web アプリケーションを開発しています。その一部では、内部ユーザーがフォームに記入し、このユーザーに代わって電子メールを送信する必要があります。すべて社内です。古い system.net.mail と新しい microsoft.exchange.webservices の 2 つのルートを検索したところ、可能性のあるルートが見つかりましたが、交換サーバーには資格情報が必要なようです。ユーザーのログインとメールアドレス login+"@company.com" しか取得できません。どうすればこれを行うことができますか?

以下は、smtp (system.net.mail) を使用したコードですが、機能しません。

            string[] username =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\');
            string email = username[1] + "@company.com";
            MailAddress from = new MailAddress(email);
            MailAddress to = new MailAddress("someone@company.com");
            MailMessage message = new MailMessage(from, to);                
            message.Subject = "testmail";
            message.Body = "<h>testmail</h>";
            message.IsBodyHtml = true;
            SmtpClient client = new SmtpClient();
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.Send(message); 
4

1 に答える 1

2

SmtpClient では、SMTP サーバーを直接指定するか、サーバーを自動的に検出するための適切なアプリケーション/マシン構成設定が必要です。あなたのコードは暗黙のうちに 2 番目のオプションを選択しています。app/machine config に適切な設定がないと思われます。Exchange は既定の構成では SMTP をサポートしていません。そのため、Exchange サーバーに詳しい人が SMTP が構成されていることを知っていて、正しいアドレスを提供できない限り、SmtpClient はおそらくアウトです。

Exchange Web サービス (別名 EWS) の方がおそらく適切な回答ですが、実際には適切ではありません。Exchange Web サービスを使用するには、次のいずれかが必要です。

1) 正しい NetworkCredential を EWS に渡すことができるように、ユーザーのドメイン、ユーザー名、およびパスワード。あなたの場合、これはおそらく、ユーザーがフォームにパスワードを入力する必要があることを意味し、要件に違反する可能性があります。

2) プロセスが実行されているユーザー (Web アプリケーションでは、IIS のアプリケーション プール ID) は、問題のユーザーとしてメールを送信する権限を持っている必要があります。

3) ASP.NET 認証を使用してユーザーを偽装できる場合 (これは LAN アプリケーションでのみ有効な方法です)、事実上オプション (2) にフォールバックできます。ユーザーは、明らかに自分のアドレスからメールを送信する権限を持っています。

ご覧のとおり、適切なアプローチは、Exchange/Active Directory/LAN の設定に大きく依存します。

于 2013-02-14T18:39:12.587 に答える