Agile actually has some answers to these problems.
I think the first problem you need to work on is code quality. Nothing should get released that has not been thoroughly tested. There should be no compromise on this. You're already seeing the consequences -- things don't work, developers get blamed, and nobody is happy.
Next, realize that deadlines are bullshit -- especially in larger companies. I've found that arbitrary dates are chosen, and then they're treated like they've been set in stone. The Agile solution is for everything to be put in priority order. Always work on whatever is most important. Or put another way, work on whatever will provide the most business value. Management should be the final arbiters of what's most valuable/important. Once you start working this way (or even just realize that deadlines are made up), your stress level will go down significantly.
Being Agile means being able to adapt to reality. (I think that's Agile's main reason for success -- it realizes such things like the fact that we're terrible at estimating and works with that reality.) Your reality seems to be that people want to re-prioritize frequently and get features turned around quickly. So change your process to something that can do that. Stop doing iteration planning, since you don't know what you'll need that far ahead of time. Instead, allow stories to be re-prioritized until the developers start on them. And consider doing continuous deployments.
Alternatively, factor in the amount of extra work that gets added to every iteration, and leave that much extra time. This should actually already be factored in to your velocity, because velocity for iterations is defined by the amount of stories (or story points) completed within the iteration -- but only for stories that were discussed during the iteration planning. So for example, if you had 20 stories defined at planning, and 8 stories were added, but you only got 12 of the original stories and 5 of the added stories done by the original end of the iteration, then your velocity (what you can expect to accomplish each iteration) would be 12 stories.
Another reality that Agile accepts is that you can either get everything you want when it's ready, or whatever is ready whenever you want. Most shops tend to go with fixed time periods, but a lot are starting to move to continuous deployment. If you go with fixed time periods, they need to be fixed. If something misses the deadline for this iteration, it has to wait until the next. If things were correctly prioritized and your iterations are short enough, this should not be too big of an issue. If you go with something like continuous deployment, people will get what they want quicker, but will have to deal with more uncertainty about when they'll get it.
Of course, Agile can't solve every problem. If management is unwilling to prioritize things, or people are unwilling to deal with the reality of what can be accomplished in the given time, then you'll have to deal with those in the same way as in any situation. Which probably means learning to set expectations better, playing office politics, or finding another job.