Это проблема шифрования?Я вижу, что вы используете STARTTLS, но я не вижу, как вы справляетесь с фактическим шифрованием / расшифровкой последующих строк ...
Согласно RFC 2595 , шифрование должно начинаться немедленнопосле ответа OK на команду STARTTLS.Ваш код предполагает, что вы даже не ждете этого OK, вместо этого вы немедленно отправляете AUTH PLAIN, в результате чего ваш клиент продолжает текстовое сообщение, пока сервер ожидает шифрование.шифрование не требуется, просто оставьте STARTTLS и придерживайтесь стандарта (E) SMTP, как определено в RFC ... Для аутентификации ESMTP вам может понадобиться использовать EHLO вместо HELO, иначе сервер может не понимать AUTH.
Все RFC, относящиеся к SMTP, вы найдете на соответствующей странице Википедии .В частности, вам понадобятся RFC5321 (последнее резюме SMTP) и RFC4954 (самое последнее описание ESMTP AUTH).Но ... это может быть сложнее, чем вы думаете.Могут быть некоторые SMTP-серверы, которые не принимают AUTH PLAIN, когда соединение не зашифровано.Вам необходимо оценить реакцию сервера на команду EHLO (см. Пример раздела в RFC4954).
Я думаю, вам будет проще использовать библиотеку.Я не знаю один для C ++, вам нужно найти его самостоятельно.