If a user has not picked up holds by the expiration date, chances are there's more than one hold affected (or ditto for holds canceled via cancel_unflled_holds). One email for each hold feels excessive. That notice really should be a digest, or at least have the option to be digested.