Код у вас в порядке. Да, служба smtp отправляет учетные данные на сервер smtp каждый раз, когда вы отправляете электронное письмо.
С точки зрения кодирования, это предпочтительный способ ведения дел. Если вы пакетируете электронную почту, то вы просто помещаете вызов метода .Send в цикл, пока новый вызов SmtpClient находится над ним.
Вы хотите оставить соединение открытым достаточно долго, чтобы выполнить работу, а затем закрыть его. В противном случае вы рискуете взорвать приложение или иначе не сможет закрыть соединение позже. Серверы имеют только ограниченное количество соединений, которые они могут обрабатывать. Если большинство приложений оставляют их открытыми в течение длительного периода времени, другим пользователям будет трудно войти.
Большинство почтовых клиентов открывают соединение, отправляют любые электронные письма в исходящие, получают новые письма, затем закрывают соединение. Когда таймер отключается, он снова выполняет процесс.
Outlook, связанный с Exchange, работает немного по-другому, потому что есть push-компонент (с сервера).