The right team building activities will depend on how well the team is currently built, since you will have different aims.
You are also not going to find a single activity that will work for everyone on the team, so you are going to have to do different things. You might have multiple activities on a single team outing, or do different single activities on two successive outings.
With a team where there aren't particularly good bonds, your aim might be to highlight the interests and perspectives of the team members. A group exercise like a Spectrogram can help people discover people with similar interests. Basically, a statement is made, and people place themselves (physically) on a continuum from "totally agree" to "totally disagree", and then some are asked why they are standing where they are standing, and people can move about along that continuum if they are swayed by the argument. Another useful exercise is Strong Wind Blows - search at the above link for it and other useful facilitation information.
With a team with some decent bonds in place, your aim might be to highlight the achievements or special knowledge of the team members. You might ask two members of your team, preferably two that don't already work very well together, to prepare a presentation together on a shared area of knowledge - a programming language they both like, a shared interest in performance, or similar. This has several opportunities:
- The co-presenters have the opportunity to work together and may build mutual respect from that.
- The respect of the team members for those presenting may improve
- Non-presenting team members may discover a shared interest with those presenting
- The team members and the presenters may learn something new
Getting out of the office and leaving work behind is a good idea. You mention discussing work items and snack. I'd recommend an approach like this:
- Discuss work items in the office
- Leave the office and rendezvousing at your entertainment location
- Doing a short 5-10 minute group exercise to shake off work and give people something to talk about during the day
- Doing something entertaining like rock climbing (in a gym, most likely), cart races, miniature golf, visiting a museum (depends on the group). Might even split into groups to suit interests at this point. Just make sure people can talk to each other during the activities.
- Have something presented (preferably not something using work examples) while snacks and drinks are available
- Have some food together. Encourage random seating, subtly or overtly.
Also, remember that team building is a process, not an activity. Every time people in the team interact, it has effects on the team. If team building activities are the only time that certain members of the team are interacting or learning about each other, it isn't going to be as effective. This can be something as simple as sharing an IRC channel or Campfire room at work (if you have timezone differences, try Campfire, since you can see what happened while you weren't there), or more subtle - like actively sharing what you know about other team members' skills, interests, and achievements with other team members.