var smtp = new SmtpClient
{
Host =smtpHost,
Port = smtpPort,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, mailFromPassword)
};
using (var message = new MailMessage(fromAddress, toAddress)
{
Subject = subject,
Body = body,
}
)
{
smtp.Send(message);
}
最後の括弧 (下から 4 行) は、using ステートメントを閉じます。ここで明らかな何かが欠けているに違いありませんが、コードはコンパイルされ、再シャープ化されますが、var メッセージは using ステートメントの外で使用されます。実際、using ステートメント内に配置すると、ビルドに失敗します。
実際、このhttps://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statementから
「using ステートメントにより、オブジェクトのメソッドを呼び出しているときに例外が発生した場合でも、Dispose が呼び出されることが保証されます。オブジェクトを try ブロック内に配置してから、finally ブロックで Dispose を呼び出すことによって、同じ結果を得ることができます。実際、これは、は、using ステートメントがコンパイラによって変換される方法です。前のコード例は、コンパイル時に次のコードに展開されます (オブジェクトの制限されたスコープを作成するために追加の中括弧に注意してください)。
メッセージはすでに範囲外であり、おそらく破棄されているはずです。