At the same time I was thinking DRY principle. I repeated too much code for every getter/setter method.
For example:
setId, setDate, setSubject, setBody, setContentType, setCharset is about same code except they send different parameters to setOptions method. setFrom, setTo, setCc, setBcc, setReplyTo is also same (again except sending different parameter to setOptions method).
Same for getters. They have about same code except 1 line (string value of variable) difference (to call getOptions method with passing options array key as string).