I would use
ItemUpdated method (since I used it in past for similar scenarios)
ItemUpdating for this scenario can lead to unwanted results eg. if your code fails item will not be updated. On other hand if email is crucial for your process maybe this can be desired behavior.
ItemUpdated you should check are conditions meet and decide do you want to send email or not. If mail sending fails your item is 'safe'.
Since ItemUpdating/ed fires on every item change you need to decide do you want to send email on each change when condition is met or do you want to send email only once. For 'once only scenario' you can implement additional flag field in your item (boolean) and set it to true when email is send. You need to include this field in original condition.
Keep in mind that if you want to change item on ItemUpdating/ed you need to make sure that your receiver doesn't fire again and goes in 'infinitive loop'. This can be done by setting SPEventReceiverBase.EventFiringEnabled Property. Also when updating flag field you can use SPListItem.SystemUpdate Method to avoid visible item changes.