Gmail 認証情報を使用して SMTP クライアントを使用して電子メールを送信しようとしています。
これは使用しているコードです
using (var mail = GetMailInfo())
{
using (SmtpClient client = new SmtpClient("smtp.gmail.com", 465))
{
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential("**@gmail.com", "Password");
client.UseDefaultCredentials = false;
client.EnableSsl = true;
client.Send(mail);
}
}
タイムアウト エラーが表示されます
操作がタイムアウトしました
再試行すると、次のような別のエラーが表示されます。
サービスが利用できないため、伝送チャネルが閉じられています。サーバーの応答は次のとおりでした。同時 SMTP 接続が多すぎます。後でもう一度試してください。
私の何が間違っているのでしょうか?
読み取れませんか?エラー メッセージには、同時 SMTP 接続が多すぎるために接続が拒否されたことが明確に示されています。d は後で試すように指示します。提供した情報により、現在サーバーが過負荷になっていることを明確に示しています。
– トムトム
2020 年 9 月 3 日 9:09
@TomTom 確かに読みました。しかし、タイムアウトになったときはメールを 1 通だけ送信し、別のときにはタイムアウトではなくこのメールが届きました。
– N.J
2020 年 9 月 3 日 9:12
そして?それはあなたの人生ではありませんrver - サーバーが過負荷になっている可能性があります。それがあなたに伝えていることです。あなたがそれを引き起こさなかったとしても、それは依然として過負荷です。渋滞に巻き込まれた人のように、「なぜ渋滞しているのに、私は車 1 台しかいないのに」というような内容のメールを送信します。ちなみに、このように一度に 1 通のメールを送信することは、SMTP プロトコルの悪用です。メールごとに新しい接続を確立することを目的としたものではありません。
– トムトム
2020 年 9 月 3 日 9:15
@TomTom OK、何を提案しますか?
– N.J
2020 年 9 月 3 日 9:22
サンプル コードはどこで入手しましたか?コードは SSL であるポート 465 を使用しており、おそらく TLS ポート 587 を使用する必要があります。参照: siteground.com/kb/google_free_smtp_server
– ジェイドウェン
2020 年 9 月 3 日 9:44
------------------------
ついに、自分のコードの何が問題だったのか分かりました
更新されたコードは以下のとおりです
using (var mail = GetMailInfo())
{
using (SmtpClient client = new SmtpClient("smtp.gmail.com", 587)) // port is 587 instead of 465 as mentioned by @jdweng in the comment
{
client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false; // this must be before the **Credentials** else this will reset the given credential
client.Credentials = new NetworkCredential("**@gmail.com", "Password");
client.EnableSsl = true;
client.Send(mail);
}
}
Gmail を使用している場合は、上部で設定に移動し、双方向認証を無効にし、安全性の低いアプリへのアクセスを有効にする必要があります。
これらはすべてここで見つけることができます