Ich habs mir nochmal durchgesehen.
Ich ging davon aus dass du alle Felder schon so angibst wie sie wirklich heißen. Ist in der Fülle an Code etwas schwer nachzuvollziehen.
Das hier
$mailText .= $name . ": " . $value . "\n";
nutzt $name das nirgends defniert ist. Meinst du hier $strName?
Aber auch dann sollte nicht "nichts" in der Mail stehen sondern wenigstens der $value und der Doppelpunkt.
Setz dir doch wirklich mal ein
print $mailText . "\n\n";
hinter jede Zuweisung und schau dir an was passiert.
Der Witz an der Sache ist, beides einzeln funktioniert
Das wundert mich jetzt aber wirklich.
Steht in $_POST zum Zeitpunkt der Mailerstellung schon noch was drin? Auch das lässt sich mit einer Ausgabe zur Kontrolle nachprüfen.
Du musst das von vorne her angehen. Wenn in einer Variablen nichts steht, prüfe nach warum nichts reingeschrieben wird. Das heißt prüfe nach ob das was reingeschrieben werden soll auch wirklich gefüllt ist. Prüfe ob eine Schleife überhaupt durchlaufen wird, oder ob sie vielleicht gar nie betreten wird, obwohl du denkst sie wird es... usw.
Sieh dir an was der Reihe nach in deinem Mailtext landet und was tatsächlich verschickt wird.
Kommt der Code überhaupt in if(isset($_POST))? Kommt er in das while, wenn ja wie oft und was tut er da genau?
Lass dir das alles mit print ausgeben. Diese Infos bringen dich schneller zur Lösung als jedes Raten aufgrund deines Codes.