Hello!
I have some questions about RCube (1.2)
rcube_message.php, lines 114-120
if (!empty($this->headers->structure)) {
$this->get_mime_numbers($this->headers->structure);
$this->parse_structure($this->headers->structure);
}
else {
$this->body = $this->storage->get_body($uid);
}
Is that the whole body of unstructured (not multipart) message is stored in memory? When you use S/MIME an encrypted email is unstructured and can be large (tens of megabytes). Of course, if the message is decrypted before this place (for example, in rcube_imap) the appearance of large unstructured letters unlikely.
function gets part body from the storage object (i.e. imap object) and not exec hook 'message_part_body'. Will it cause problems in message decryption?
Also note that some plugins communicate directly with the rcube_imap, to get the text of the message part.
the message. But, function parse_structure in which is the challenge of this hook, not always called. I do not quite understand the logic of RC and I ask you to say whether the hook 'message_part_structure' will provide normal work in these situations:
it can be a multipart or not multipart message.
decryption, it can be a multipart or not multipart message. In both situations changing of part structure is not sufficient.
or sign verification. How it can be done?
Best regards, Vladimir Gorpenko
On 01/13/2016 10:00 AM, Владимир Горпенко wrote:
Hello!
I have some questions about RCube (1.2)
rcube_message.php, lines 114-120
if (!empty($this->headers->structure)) { $this->get_mime_numbers($this->headers->structure); $this->parse_structure($this->headers->structure); } else { $this->body = $this->storage->get_body($uid); }
Is that the whole body of unstructured (not multipart) message is stored in memory?
Only, if the server didn't returned BODYSTRUCTURE for any reason. In most cases even plain text message has structure. So, this 'else' is more of a fallback here.
When you use S/MIME an encrypted email is unstructured and can be large (tens of megabytes). Of course, if the message is decrypted before this place (for example, in rcube_imap) the appearance of large unstructured letters unlikely.
rcube_imap is not a proper place to do decryption.
- What for is the function get_part_content in rcube_message.php? This
function gets part body from the storage object (i.e. imap object) and not exec hook 'message_part_body'. Will it cause problems in message decryption?
get_part_content() is deprecated (and should not be used), we use get_part_body() now.
- The same questions about get_body in rcube_storage.php.
You should not use this method for decryption purposes. rcube_message::get_part_body() is all you need. Sometimes I use also get_raw_body/get_raw_headers methods of storage object.
Also note that some plugins communicate directly with the rcube_imap, to get the text of the message part.
So what?
- Yes, 'message_part_structure' can change the structure of the part of
the message. But, function parse_structure in which is the challenge of this hook, not always called. I do not quite understand the logic of RC and I ask you to say whether the hook 'message_part_structure' will provide normal work in these situations:
- S/MIME ecnrypted message is not multupart message. After decryption,
it can be a multipart or not multipart message.
- S/MIME signed message is usually a multipart message. After
decryption, it can be a multipart or not multipart message. In both situations changing of part structure is not sufficient.
Enigma has the same requirements and it works, so it's possible.
- Some of message headers (Content*) have to be changed on decryption
or sign verification. How it can be done?
I'm not sure this is exactly the same you want to do, but see how Enigma does this. Here's the message_part_structure hook handler: https://github.com/roundcube/roundcubemail/blob/master/plugins/enigma/lib/en... All in all S/MIME is not much different that PGP/MIME in context of message structure.
Also worth to take a look is the place where a message is displayed https://github.com/roundcube/roundcubemail/blob/master/program/steps/mail/fu... You have to modify message structure in an appropriate way.