asp.net mvc アプリケーションを使用してメールを送信しようとしています。SMTP クライアントは web.config で構成されます。
<mailSettings>
<smtp from="noreply@test.sk">
<network host="mail.test.sk" defaultCredentials="false" userName="noreply@test.sk" password="pass" port="25"/>
</smtp>
</mailSettings>
C#:
using (SmtpClient client = new SmtpClient())
{
MailMessage message = new MailMessage(from, to, subject, body);
client.Timeout = 10000;
client.Send(message);
return false;
}
問題は、Outlook を使用して電子メールを送信しようとするまで機能しない (タイムアウト例外が発生する) ことです。Outlook でメールを送信した直後に、Web アプリケーションでも正常に送信されます。私のIPからのすべての電子メールを認証できるようにする、outlookが行っている特別な種類の認証はありますか?? Outlookで送信して初めて機能する理由は何ですか?
ところで:VS asp.net開発サーバーでアプリケーションを実行しています。Web ホスティング サーバーにデプロイすると、動作しません (タイムアウト)。私の Web ホスティング プロバイダーは、そのサーバーには従来の smtp 認証があると教えてくれました (smtp の前に pop3 ではありません)。
編集:
それが機能し、telnetで試したり、wiresharkでトレースしたりしたところ、次の方法で通信が開始されたことがわかりました。
220 mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-PIPELINING
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
...
うまくいかなかったとき (前日に試しただけ) と比較すると、コミュニケーション全体は次のようになりました。
220-mail2.hostmaster.sk ESMTP Postfix
EHLO fernet-PC
250-mail2.hostmaster.sk
250-SIZE 104857600
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
そのため、サポートされている認証方法とパイプラインのサポートには違いがあります。System.Net.Mail.SmtpClient は、どの認証方法を使用する必要があるのか わからないため、スタックしてタイムアウト例外が発生していると思います。
興味深いのは、Outlook が接続してメールを送信するのに問題がないことです。
時間がなくなったので、smtp サーバーを使用しないことで問題を解決しました。代わりに gmail の smtp サーバーを使用しています。エイリアスを必要なものに設定した新しいGmailアカウントを作成したため、最初の外観ではメールがGmailから送信されたようには見えません。