IMP_Compose::sendRedirectMessage PHP Method

sendRedirectMessage() public method

Send a redirect (a/k/a resent) message. See RFC 5322 [3.6.6].
public sendRedirectMessage ( mixed $to, boolean $log = true ) : array
$to mixed The addresses to redirect to.
$log boolean Whether to log the resending in the history and sentmail log.
return array An object with the following properties for each redirected message: - contents: (IMP_Contents) The contents object. - headers: (Horde_Mime_Headers) The header object. - mbox: (IMP_Mailbox) Mailbox of the message. - uid: (string) UID of the message.
    public function sendRedirectMessage($to, $log = true)
    {
        global $injector, $registry;
        $recip = $this->recipientList(array('to' => $to));
        $identity = $injector->getInstance('IMP_Identity');
        $from_addr = $identity->getFromAddress();
        $out = array();
        foreach ($this->getMetadata('redirect_indices') as $val) {
            foreach ($val->uids as $val2) {
                try {
                    $contents = $injector->getInstance('IMP_Factory_Contents')->create($val->mbox->getIndicesOb($val2));
                } catch (IMP_Exception $e) {
                    throw new IMP_Compose_Exception(_("Error when redirecting message."));
                }
                $headers = $contents->getHeader();
                /* We need to set the Return-Path header to the current user -
                 * see RFC 2821 [4.4]. */
                $headers->removeHeader('return-path');
                $headers->addHeader('Return-Path', $from_addr);
                /* Generate the 'Resent' headers (RFC 5322 [3.6.6]). These
                 * headers are prepended to the message. */
                $resent_headers = new Horde_Mime_Headers();
                $resent_headers->addHeader('Resent-Date', date('r'));
                $resent_headers->addHeader('Resent-From', $from_addr);
                $resent_headers->addHeader('Resent-To', $recip['header']['to']);
                $resent_headers->addHeader('Resent-Message-ID', Horde_Mime_Headers_MessageId::create());
                $header_text = trim($resent_headers->toString(array('encode' => 'UTF-8'))) . "\n" . trim($contents->getHeader(IMP_Contents::HEADER_TEXT));
                $this->_prepSendMessageAssert($recip['list']);
                $to = $this->_prepSendMessage($recip['list']);
                $hdr_array = $headers->toArray(array('charset' => 'UTF-8'));
                $hdr_array['_raw'] = $header_text;
                try {
                    $injector->getInstance('IMP_Mail')->send($to, $hdr_array, $contents->getBody());
                } catch (Horde_Mail_Exception $e) {
                    $e2 = new IMP_Compose_Exception($e);
                    if (($prev = $e->getPrevious()) && $prev instanceof Horde_Smtp_Exception) {
                        if ($prev instanceof Horde_Smtp_Exception_Recipients) {
                            $e2 = new IMP_Compose_Exception_Addresses($e);
                            foreach ($prev->recipients as $val) {
                                $e2->addAddress(new Horde_Mail_Rfc822_Address($val), _("Address rejected by the sending mail server."), $e2::BAD);
                            }
                        }
                        Horde::log(sprintf("SMTP Error: %s (%u; %s)", $prev->raw_msg, $prev->getCode(), $prev->getEnhancedSmtpCode() ?: 'N/A'), 'ERR');
                        $e2->logged = true;
                    }
                    throw $e2;
                }
                $recipients = strval($recip['list']);
                Horde::log(sprintf("%s Redirected message sent to %s from %s", $_SERVER['REMOTE_ADDR'], $recipients, $registry->getAuth()), 'INFO');
                if ($log && ($tmp = $headers['Message-ID'])) {
                    $msg_id = reset($tmp->getIdentificationOb()->ids);
                    /* Store history information. */
                    $injector->getInstance('IMP_Maillog')->log(new IMP_Maillog_Message($msg_id), new IMP_Maillog_Log_Redirect(array('msgid' => reset($resent_headers->getIdentificationOb()->ids), 'recipients' => $recipients)));
                    $injector->getInstance('IMP_Sentmail')->log(IMP_Sentmail::REDIRECT, $msg_id, $recipients);
                }
                $tmp = new stdClass();
                $tmp->contents = $contents;
                $tmp->headers = $headers;
                $tmp->mbox = $val->mbox;
                $tmp->uid = $val2;
                $out[] = $tmp;
            }
        }
        return $out;
    }