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.
Why is a Contact put on "hold"?
Here is a list from the database of the different types of bounces, and how many times each bounce must occur before CiviCRM deems on hold appropriate.
Version 3.2 and after
In version 3.2 and later, Advanced Search has an option for finding " Email On Hold" contacts. By selecting some or all of the results and "Unhold Emails" you can remove the hold from certain Contacts. Be careful removing Hold status from a Contact, as Hold status could exist for a very good reason.
Version 3.1 and earlier
In version 3.1 and earlier, 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: