/**
* 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);
}
$last = $body_part;
} elseif ($message->att_local_name) {
+ global $username, $attachment_dir;
+ $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
$filename = $message->att_local_name;
- $file = fopen ($filename, 'rb');
+ $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb');
while ($body_part = fgets($file, 4096)) {
// remove NUL characters
$body_part = str_replace("\0",'',$body_part);
$this->writeToStream($stream, $body_part);
}
} elseif ($message->att_local_name) {
+ global $username, $attachment_dir;
+ $hashed_attachment_dir = getHashedDir($username, $attachment_dir);
$filename = $message->att_local_name;
- $file = fopen ($filename, 'rb');
+ $file = fopen ($hashed_attachment_dir . '/' . $filename, 'rb');
while ($tmp = fread($file, 570)) {
$body_part = chunk_split(base64_encode($tmp));
// Up to 4.3.10 chunk_split always appends a newline,
* @return string $header
*/
function prepareRFC822_Header($rfc822_header, $reply_rfc822_header, &$raw_length) {
- global $domain, $version, $username, $encode_header_key,
+ global $domain, $username, $encode_header_key,
$edit_identity, $hide_auth_header;
/* if server var SERVER_NAME not available, use $domain */
}
}
/* Identify SquirrelMail */
- $header[] = 'User-Agent: SquirrelMail/' . $version . $rn;
+ $header[] = 'User-Agent: SquirrelMail/' . SM_VERSION . $rn;
/* Do the MIME-stuff */
$header[] = 'MIME-Version: 1.0' . $rn;
$contenttype = 'Content-Type: '. $rfc822_header->content_type->type0 .'/'.