Las cadenas siempre se evalúan como verdaderas booleanas a menos que tengan un valor que PHP considere "vacío" (tomado de la documentación deempty ):
"" (una cadena vacía);
"0" (0 como una cadena)
Si necesita establecer un valor booleano basado en el valor de texto de una cadena, deberá verificar la presencia o no de ese valor.
$test_mode_mail = $string === 'true'? true: false;
EDITAR: el código anterior está destinado a la claridad de la comprensión. En uso real, el siguiente código puede ser más apropiado:
$test_mode_mail = ($string === 'true');
o tal vez el uso de la filter_varfunción puede cubrir más valores booleanos:
filter_var($string, FILTER_VALIDATE_BOOLEAN);
filter_varabarca toda una serie de valores, incluyendo los valores Truthy "true", "1", "yes"y "on". Ver aquí para más detalles.