Immigration/migration happens on two levels. People move from the countryside to major cities and from poor, miserable places to happier, more prosperous places. They will cross borders to do so.
I'd like to see a player be able to designate 2, 3, 4 or so cities (based on total city count) as destinations for internal migration. All other cities of an empire would "send" a portion of their population growth to the nearest designated city each time it grew. An unhappy cities would send a bit more of its population growth.
Unhappy cities in empire A that have a very happy city in a neighboring empire, B, that is closer than a similar level of happiness city in its own empire (A) would send people to the neighboring empire. If the culture/religion are the same/similar, more would go each turn. As I see it the per turn trickle would small (maybe .1 or .2 of a population point), but steady, so over time, attractive cities would grow faster than normal and housing needs might become a problem.