There are no fancy quoting or escaping features in logstash configs Try this, with a literal newline embedded in the string
grok { match => { "message" => "Date: (?<date>.*) From: " } }
Note that using .* sometimes grabs a lot more than you want. These two variants may help you understand what it is doing. The first one says .* followed by a newline, which ends up consuming the entire message. The second says not-newline followed by a newline, which consumes the rest of the line. If the order of headers ever varies, you will need this one.
grok { match => { "message" => "Date: (?<date1>.*) " } } grok { match => { "message" => "Date: (?<date2>[^ ]*) " } }