Get private document on demand

No, there will be only one channel pull a time - first from user channel to get all his message headers, next when user open the message we pull only from this message channel to get the body.

But in this case we have to give user access to each message channel, so thousands users will have thousands channels and I wonder if it’ll be a problem.

Yes, perfect solution will be to pull individual documents but only those user has access to through channels.