+  my %addresses;
+  my $headers = '';
+  foreach my $item (qw(from to cc bcc)) {
+    $addresses{$item} = [];
+    next unless ($self->{$item});
+
+    my (@addr_objects) = Email::Address->parse($self->{$item});
+    next unless (scalar @addr_objects);
+
+    foreach my $addr_obj (@addr_objects) {
+      push @{ $addresses{$item} }, $addr_obj->address;
+      my $phrase = $addr_obj->phrase();
+      if ($phrase) {
+        $phrase =~ s/^\"//;
+        $phrase =~ s/\"$//;
+        $addr_obj->phrase($self->mime_quote_text($phrase));
+      }
+
+      $headers .= sprintf("%s: %s\n", ucfirst($item), $addr_obj->format()) unless $driver->keep_from_header($item);
+    }
+  }
+
+  $headers .= sprintf("Subject: %s\n", $self->mime_quote_text($self->recode($self->{subject}), 60));
+
+  $driver->start_mail(from => $self->{from}, to => [ map { @{ $addresses{$_} } } qw(to cc bcc) ]);
+
+  $driver->print(qq|${headers}Message-ID: <$msgid>