1

通知メールを送信する小さなWinFormsアプリケーションがあります。Outlookクライアントでは正常に機能しますが、gmail / yahoo/windowsliveアドレスを入力すると爆弾が発生します。system.web.mailとスキーマを使用した多くの投稿を見てきましたが、これを使用しようとするとVisual Studio 2010でエラーが発生します(.Net 2.0が原因であると想定しています)。これらすべての電子メールプロバイダーに中継するようにSMTPクライアントコードを構成することは可能ですか?

MailMessageでsystem.net.mailを使用しています。私の設定コードは以下の通りです...

SmtpClient mailSender = new SmtpClient("smtp.myclient.com");
            mailSender.EnableSsl = true;
            mailSender.Send(message);
4

3 に答える 3

3

ワークステーションは(おそらく)Active Directoryドメインにログインしており、Exchangeサーバーはそのために接続を「信頼」しているため、Outlookクライアントでは正常に機能します。

メールサービスにユーザーの資格情報を追加する必要があり、ユーザーからそれらを取得する必要があります。

 mailsender.Credentials = new NetworkCredential(username, password);

また、SSLのPortプロパティを設定することを忘れないでください。一部のプロバイダーは、標準のものを使用していません。

于 2012-01-20T22:31:31.583 に答える
0

アプリケーションがOutlookクライアントで動作する場合、アプリケーションは電子メールを正しく送信します。Webアドレスとの唯一の違いは、電子メールの表示方法であるため、エンコードに問題がある可能性があります。アプリケーションが爆弾を投下することの意味を詳しく教えてください。

于 2012-01-20T22:28:45.143 に答える
0

メールサーバーに提供された資格情報自体は問題ない場合でも、例外メッセージを受け取ることがありますが、[差出人]フィールドがその特定のユーザーと一致しません。(これは機能であり、送信者のなりすましを防ぐためにSMTPサーバーによって適用される制限です。SMTPプロトコル自体は非常に自由なので、理論的には「From」フィールドに任意の電子メールアドレスを書き込むことができます。なりすましの防止は非常に重要です。電子メールスパムと戦うため。)

一般に、何か間違ったことをすると、予期せず説明的なSmtpExceptionが発生します。埋め込まれた内部例外によって、より多くのケースが区別される場合があります。さまざまなケースをデバッグする必要があります。私はいくつかを整理しました。

  1. 電子メールの「差出人」アドレスが、認証されたユーザーの電子メールアドレスと一致しない場合、「メールボックスを利用できません」というSmtpExceptionが発生します。および「クライアントには、この送信者として送信する権限がありません」。
  2. 間違ったホストまたはポートを指定すると、SmtpExceptionメッセージは「メールボックスが利用できません。」で始まります。「リモートサーバーに接続できません」というタイプのWebExceptionの内部例外があり、内部例外自体は次のようになります。 「ターゲットマシンがアクティブに拒否したため、接続できませんでした」というタイプのSocketException。
  3. SSLをオンにした場合(mailSender.EnableSsl = true; //コードに対して)、SMTPサーバーがSSLをサポートしていない場合、またはその逆の場合、「サーバーは安全な接続をサポートしていません」というSmtpExceptionが発生します。 "。
  4. クレデンシャル(ユーザー名/パスワード)が間違っている場合、またはその他のSSLの問題が発生した場合は、「SMTPサーバーに安全な接続が必要であるか、クライアントが認証されていません」というSmtpExeptionが表示されます。

注意すべきもう1つの点は、NetworkCredentialオブジェクトをどの程度正確に作成するかです。

System.Net.Mailはとても便利です!

于 2013-03-19T17:28:25.673 に答える