Puoi usare le transactions di mysql per farlo (come hai già provato a fare), esegui le query e l'invio della mail, se entrambi non hanno dato errori procedi con il commit della query, altrimenti fai un rollback. Io metterei tutto dentro ad un blocco try catch, facendo generare una exception a phpmailer-contatta.php e a mysql in caso di errore, così da uscire dal try prima di arrivare al commit.

Questo codice non funziona, ci sono solo le parti utili a farti capire cosa farei io:

codice:
try {


$this->connect->query($sql);
include '../phpmailer/phpmailer-contatta.php';


/** 
 * Se qui siamo ancora dentro al try significa che tutto è andato a buon fine.
 * Quindi facciamo il commit.
 */
 
mysqli_commit($this->connect);


} catch( Exception $e ) {


mysqli_rollback($this->connect); 


}
L'unico problema qui è far generare a phpmailer-contatta.php e a mysqli delle Exception in caso di errore, io solitamente uso pdo quindi non ne sono certo ma dovrebbe bastare usare questa funzione:

codice:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Phpmailer invece dovrebbe generare delle exception di default sugli errori, quindi non dovresti avere grossi problemi, magari controlla che siano passate correttamente dallo script esterno.