I sometimes automatically press TAB, expecting to move from the To: field to the right place on the next line (the subject: field) to start typing. Or from there a few lines down to where my e-mail should start. The problem is, I have TAB bound to yas/expand, which falls back to the function wl-draft-mode usually has bound to tab for other completion and possibly even inserting a tab. I think I've written the least intrusive bit of code to sit between these two and do what I want when TAB is pressed on the field lines.
(defun starts-with (string prefix)
(and (>= (length string) (length prefix))
(equal prefix (substring string 0 (length prefix)))))
(defun jks-draft-magic-tab (&optional start-pos)
"Try do something sensible in wl-draft-mode under various
circumstances when tab is pressed"
(let* ((orig (thing-at-point 'line))
(typed (downcase orig)))
(cond ((or (starts-with typed "to:") (starts-with typed "cc:") (starts-with typed "bcc:"))
(search-forward "ect: "))
((starts-with typed "subject:")
(search-forward "--text follows this line--\n"))