/**
* function mail - send the message parts to the SMTP stream
*
- * @param Message $message Message class to send
- * @param resource $stream file handle to the SMTP stream
+ * @param Message $message Message object to send
+ * @param resource $stream Handle to the SMTP stream
+ * @param string $reply_id Identifies message being replied to
+ * (OPTIONAL; caller should ONLY specify
+ * a value for this when the message
+ * being sent is a reply)
+ * @param string $reply_ent_id Identifies message being replied to
+ * in the case it was an embedded/attached
+ * message inside another (OPTIONAL; caller
+ * should ONLY specify a value for this
+ * when the message being sent is a reply)
*
* @return integer $raw_length
*/
- function mail($message, $stream=false) {
+ function mail($message, $stream=false, $reply_id=0, $reply_ent_id=0) {
$rfc822_header = $message->rfc822_header;
if (count($message->entities)) {
$boundary = $this->mimeBoundary();
$boundary='';
}
$raw_length = 0;
+
+
+ // calculate reply header if needed
+ //
+ if ($reply_id) {
+ global $imapConnection, $username, $imapServerAddress,
+ $imapPort, $mailbox;
+ if (!$imapConnection)
+ $imapConnection = sqimap_login($username, FALSE,
+ $imapServerAddress, $imapPort, 0);
+
+ sqimap_mailbox_select($imapConnection, $mailbox);
+ $reply_message = sqimap_get_message($imapConnection, $reply_id, $mailbox);
+
+ if ($reply_ent_id) {
+ /* redefine the messsage in case of message/rfc822 */
+ $reply_message = $message->getEntity($reply_ent_id);
+ /* message is an entity which contains the envelope and type0=message
+ * and type1=rfc822. The actual entities are childs from
+ * $reply_message->entities[0]. That's where the encoding and is located
+ */
+
+ $orig_header = $reply_message->rfc822_header; /* here is the envelope located */
+
+ } else {
+ $orig_header = $reply_message->rfc822_header;
+ }
+ }
+ $message->reply_rfc822_header = $orig_header;
+
+
$reply_rfc822_header = (isset($message->reply_rfc822_header)
? $message->reply_rfc822_header : '');
$header = $this->prepareRFC822_Header($rfc822_header, $reply_rfc822_header, $raw_length);
$rfc822_header->content_type = $content_type;
$composeMessage->rfc822_header = $rfc822_header;
+ if ($action == 'reply' || $action == 'reply_all') {
+ global $passed_id, $passed_ent_id;
+ $reply_id = $passed_id;
+ $reply_ent_id = $passed_ent_id;
+ } else {
+ $reply_id = '';
+ $reply_ent_id = '';
+ }
/* Here you can modify the message structure just before we hand
it over to deliver; plugin authors note that $composeMessage
if (sqimap_mailbox_exists ($imap_stream, $draft_folder)) {
require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
$imap_deliver = new Deliver_IMAP();
- $length = $imap_deliver->mail($composeMessage);
+ $length = $imap_deliver->mail($composeMessage, 0, $reply_id, $reply_ent_id);
sqimap_append ($imap_stream, $draft_folder, $length);
- $imap_deliver->mail($composeMessage, $imap_stream);
+ $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id);
sqimap_append_done ($imap_stream, $draft_folder);
sqimap_logout($imap_stream);
unset ($imap_deliver);
}
$success = false;
if ($stream) {
- $length = $deliver->mail($composeMessage, $stream);
+ $length = $deliver->mail($composeMessage, $stream, $reply_id, $reply_ent_id);
$success = $deliver->finalizeStream($stream);
}
if (!$success) {
sqimap_append ($imap_stream, $sent_folder, $length);
require_once(SM_PATH . 'class/deliver/Deliver_IMAP.class.php');
$imap_deliver = new Deliver_IMAP();
- $imap_deliver->mail($composeMessage, $imap_stream);
+ $imap_deliver->mail($composeMessage, $imap_stream, $reply_id, $reply_ent_id);
sqimap_append_done ($imap_stream, $sent_folder);
unset ($imap_deliver);
}