When the recipient's email server responds with a "bounce" email it could be for a variety of reasons. The CiviCRM mail processing script attempts to determine the cause for the bounce by parsing the bounce email returned by the receipient's email server. Based on the nature of the bounce and the number of times a bounce has occured attempting to send to this particular email, a Contact's email may be placed on hold.
Here is a list from the database (as of version 3.1) of the different types of bounces, and how many times each bounce must occur before CiviCRM deems on hold appropriate.
The user could use the Search Builder function to find those contacts with an email on hold. The user could also look at the bounce report of a CiviMail sent message. However, once on hold a Contact may only be removed from this status by a CiviCRM user manually by editing a Contact's record page.
As CiviCRM administrator, you could execute a series of queries aimed at searching for Contacts with on hold status and/or batch removing hold status.
Hold status is recorded in the civicrm_email table as column on_hold. The most basic way of batch removing on hold status is by use of a simple query such as this one:
Warning: backup your database before running any direct queries.
A more nuanced query might be something like: