Просто, чтобы вы знали, это не будет обрабатывать упакованные заголовки. Фактически, это регулярное выражение возьмет завернутый заголовок и добавит его к реальному заголовку. Особенно, если в следующих строках заголовок без переноса не имеет ":".
Опираясь на регулярное выражение Сергея Андреева, этот будет обрабатывать не захватывая завернутые строки:
^([^:\s+]+):(.*)$
Однако, лучшее, что нужно сделать, это на самом деле читать заголовки построчно и анализировать соответственно. Это боль (как я должен был сделать для производственного кода), но это наиболее точно.