1

MailKit を使用して、IMAP を使用していくつかの電子メールを取得し、SMTP を使用してそれらを転送しています (詳細はこちら)。しかし、SMTP が電子メールを送信するのに非常に時間がかかります。

NuGet経由でメールキットを使用しています

これは私が使用しているコードです

<!-- language: c# -->

var before = DateTime.Now;
Console.Write("\tForwarding email... ");

smtpClient.Send(forwardMessage, fromMailboxAddress, new[] { toMailboxAddress });

Console.WriteLine(" done! ({0})", DateTime.Now - before);

そして、かかる時間は通常30秒以上です。何か問題があるのではないかと疑うのは、メールが実際にほぼ瞬時に転送されることです。コードがsmtpClient.Sendメソッドに到達するよりも数秒 (またはそれ以下) で、送信先のメール アカウントにメッセージが表示されるのを確認できます (Thunderbird を同時に)、しかし何かがコードをSendコード行でまだ何かをしているようにします。

コードが何をしているのか、なぜそんなに時間がかかるのかを知る方法はありますか?

4

1 に答える 1

1

ここで SmtpClient.Send() コードが何をしているかを確認できます: SmtpClient.cs:1543

client.Send() が呼び出されてから数秒以内に宛先にメッセージが表示される場合、送信に 30 秒以上かかる理由は考えられません。

私の唯一の推測は、サーバーが DATA (または BDAT) コマンド (生のメッセージ データを実際に送信するコマンド) への応答を送信するのに長い時間がかかっているということです。

言い換えれば、私の推測では、次の行でなければならないということです: SmtpClient.cs:1517またはこの行: SmtpClient.cs:1488

これは ReadResponse() メソッドです: SmtpClient.cs:320。ほとんどの場合、待機は Poll() 呼び出しで行われるか、ストリームがポーリング (SslStream) をサポートしていない場合は、サーバーからの応答を待って stream.Read() 呼び出しでスタックします。

于 2015-04-08T12:54:38.357 に答える