Странно, но для меня работает следующий порядок:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
Обратное не работает.
Хорошим подходом к этому было бы выполнение SMTP в качестве фонового процесса с использованием какого-либо механизма организации очередей. Таким образом, в основном, всякий раз, когда JS запускает AJAX для отправки по почте, PHP помещает запрос электронной почты в очередь и немедленно отправляет ответ обратно в XHR. Таким образом, ваше выполнение AJAX не будет заблокировано надолго. Если вы используете некий PHP-фреймворк, такой как Laravel, вам будет проще управлять очередями, в противном случае посмотрите этот пост.