As strings sempre avaliam como boolean true, a menos que tenham um valor considerado "vazio" pelo PHP (extraído da documentação deempty ):
"" (uma string vazia);
"0" (0 como uma string)
Se você precisar definir um valor booleano com base no valor do texto de uma string, precisará verificar a presença ou não desse valor.
$test_mode_mail = $string === 'true'? true: false;
EDIT: o código acima destina-se à clareza de entendimento. No uso real, o código a seguir pode ser mais apropriado:
$test_mode_mail = ($string === 'true');
ou talvez o uso da filter_varfunção possa cobrir mais valores booleanos:
filter_var($string, FILTER_VALIDATE_BOOLEAN);
filter_varabrange toda uma gama de valores, incluindo os valores truthy "true", "1", "yes"e "on". Veja aqui para mais detalhes.