`parse_headers()` is mainly breaking in `header name` and `header body`, not doing deep parsing of `header body` part for most of the headers, but only for a few. To get the From header body parsed, you have to use `parse_from_header()`, not parse it internally using parse_to(). You can still use `parse_headers(msg, HDR_EOH_F, 0)` to locate other headers, just do not expect to do deep parsing of every header, there are dedicated functions that have to be used (e.g., for Contact, Route, ...).