If I remermber correctly, I tested it a while ago without the Serializable and it failed.
The reason is that an Email object is used as a private member of SendEmailTask. The SendEmailTask will be pushed into the queue and executed later. So I think all the child objects of SendEmailTask have to be serializable, since App Engine will probably write the task on disk and read it later for execution.