Just a comment. I think this subject is difficult without making the English incorrect. It becomes much more understandable when the translation is made using correct English. Some examples:
¿A quién le enviaste la carta?
Who did you send the letter to?
The English should be: To
whom did you send the letter?
¿Para quién has
comprado esas flores tan bonitas?
Who have you bought such pretty flowers for?
The English should be: For whom have you bought
such pretty flowers?
¿Con quiénes vais
de vacaciones?
Who are you going on holiday with?
The English should be: With whom are you
going on holiday?
¿Por quién harías
una locura?
Who would you do something crazy for?
The English should be: For whom would you do
something crazy?
This does not include all the examples, but it is enough to see the problem.