Came across an issue today, with our exchange 2007 environment where a user had tried to send a large email (I know limits should be set to disallow this ideally). The email was held in the submission queue for about 10 minutes, then sent to the delivery queue. This then got stuck, and eventually caused the transport service to stop and therefore email to stop flowing.
The resolution was to recreate the queue, which sounds scary, but it quite simple:
pause the transport service on the hub server so that it will stop receiving new emails, but will still deliver the current mail in the queue (the ones that it can). Once the only messages left in queue are the ones that will not send, stop the transport service.
Browse to the location of the message queue. Default location is installation path\Program Files\Microsoft\Exchange Server\TransportRoles\data\
Rename the queue folder to queue_old.
Start the transport service and a new queue folder will be created. This will contain an empty, clean queue which no longer contains the offending email item. Email should now flow perfectly.