In Japanese, the sentence structure てあげる / てあげます means “I do something for you/ someone”, e.g. 持ってあげる = I hold it for you, 貸してあげる = I lend it to you. In other words, when we use てあげる, we are giving a service.
The problem is that the Japanese people are so obsessed with whether they owe people a favor or other people owe them a favor. And in a Japanese society, if you explicitly mention that you have done the listener a favor, you are being very impolite, especially when the listener is someone you need to pay respect, e.g. your teacher. So when you see your teacher holding something heavy and want to help him, you MUST NOT say “持ってあげましょう” (Let me help you hold it). Even the politer form てさしあげる is NOT allowed. When you are helping your listener, you should never mention that you are helping him. Otherwise, your listener will think that you are 恩着せがましい (patronizing).
So what should we say?
As for helping your teacher with the heavy things, you should say “お持ちしましょう” (I will hold it), without mentioning “help” or “for you”. Or when you lend a book to your listener, you can say “読んでください” (Please read it). (For how to use ください correctly, click here.) Actually, when you are giving something to your listener, you are recommended to use the magic word どうぞ.
And when can we use てあげる?
It is okay to use てあげる when the listener or people within the listener’s circle are not at the same time the recipient of your service. By the listener’s circle, I mean his friends, relatives, colleagues, etc. When you have done a service to those people, you should not use てあげる in front of your listener either.
A magic alternative: させていただきます
Influenced by the Kansai region where Keigo (honorific phrases) are more complicated and developed than standard Japanese, Japanese people tend to use させていただきます nowadays when they are providing a service.
ていただきます means "you do something to me". So させていただきます literally means "you let me do something". The beauty of this phrase is that while it is clear we are providing a service to the listener, we are being so humble and say that it is the listener who allows us to provide such service. When the Japanese voice actors sent me their voice files, usually they wrote "ファイルを送らせていただきます" (Please let me send you the file).
For English speakers, there are just too many traps you can fall into when you speak Japanese without knowing about the culture. You can't just learn how the Japanese speak their language, but you also need to know how they think in different situations. Casual phrases in English like "let me help you" may be a taboo in Japanese.