Discussion:
No MIME-Type in "imap_fetch_overview()"
Domain nikha.org
2013-09-18 11:57:22 UTC
Permalink
Hello all,

im posting this here, because the bug report system of "php.net" is not right
place for my problem. It's not a bug, but a wish - an I found there no
"wishlist" option at all.

I'm running my own webmail-client, written in PHP. It is stable, fast and
pretty, showing the full power of the PHP imap section.

Of course it presents paginated content lists for every mailbox the user may
open. These lists tell him some usefull things about every mail actually listed:
Sender, date, subject, size and (eventually) flags.

All these things are nicely delivered by the function "imap_fetch_overview()"
The same could be done by calling "imap_headerinfo()" for every single mail, but
"fetch_overview" seems to be faster, because it does it at once for the whole
batch.

BUT NONE OF THEM returns any information about the MIME-Type of the mail!

Since the user of my webmail client has the intrinsic, natural born an general
human right to KNOW whether some mail in his mailbox has attachments or not, I'm
forced to do very ugly things. My script calls additionally for every (!)
actually listed mail "imap_fetchbody($connect, $msg_no, 0)" - where "$connect"
holds the result of "imap_open()".

That gives me the mail header, the script reads the line starting with
"Content-Type:" and returns its content. Evaluating this against "mixed" or
"alternative" we have finaly what we want: This mail has attachments! Or is
written in HTML, what is even more we wanted!

Works fine, but is ugly. First "fetch_overview" parses all mail headers, then
they are fetched again to be parsed for the MIME-Type. I could just omit
"fetch_overview" and read the headers by my own means, that whould be faster,
but then I loose the size information, that is NOT (and cannot) be part of the
mail header!

If I want to have both, size and MIME-Type, and I WANT to have both, respecting
the intrinsic, natural born and general human rights of my user, im must call
both, "overview" and "fetchbody".

My question is this: Is there a better solution? Or is there someone that knows
someone among the PHP-Developpers to suggest them an improvement of the
functions "imap_fetch_overivew()" and "imap_headerinfo()". Please, Please, add
the MIME-Type to your fantastic object collections! BTW: It's really easy. Read
the "Content-Type"-Line! Sorry...

Hope, somebody has an idea,
my regards,

Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Negin Nickparsa
2013-09-23 18:59:42 UTC
Permalink
I have read your mail twice and still I could not get what you want
exactly. can't get the structure of the email either although you
elaborate it in details.

you have said something about human rights that I couldn't understand why?
but if you want to get the type of files fetch the structure and then you
can use disposition string, find the "attachment" and then return the
array.




Sincerely
Negin Nickparsa
Post by Domain nikha.org
Hello all,
im posting this here, because the bug report system of "php.net" is not right
place for my problem. It's not a bug, but a wish - an I found there no
"wishlist" option at all.
I'm running my own webmail-client, written in PHP. It is stable, fast and
pretty, showing the full power of the PHP imap section.
Of course it presents paginated content lists for every mailbox the user may
Sender, date, subject, size and (eventually) flags.
All these things are nicely delivered by the function
"imap_fetch_overview()"
The same could be done by calling "imap_headerinfo()" for every single mail, but
"fetch_overview" seems to be faster, because it does it at once for the whole
batch.
BUT NONE OF THEM returns any information about the MIME-Type of the mail!
Since the user of my webmail client has the intrinsic, natural born an general
human right to KNOW whether some mail in his mailbox has attachments or not, I'm
forced to do very ugly things. My script calls additionally for every (!)
actually listed mail "imap_fetchbody($connect, $msg_no, 0)" - where "$connect"
holds the result of "imap_open()".
That gives me the mail header, the script reads the line starting with
"Content-Type:" and returns its content. Evaluating this against "mixed" or
"alternative" we have finaly what we want: This mail has attachments! Or is
written in HTML, what is even more we wanted!
Works fine, but is ugly. First "fetch_overview" parses all mail headers, then
they are fetched again to be parsed for the MIME-Type. I could just omit
"fetch_overview" and read the headers by my own means, that whould be faster,
but then I loose the size information, that is NOT (and cannot) be part of the
mail header!
If I want to have both, size and MIME-Type, and I WANT to have both, respecting
the intrinsic, natural born and general human rights of my user, im must call
both, "overview" and "fetchbody".
My question is this: Is there a better solution? Or is there someone that knows
someone among the PHP-Developpers to suggest them an improvement of the
functions "imap_fetch_overivew()" and "imap_headerinfo()". Please, Please, add
the MIME-Type to your fantastic object collections! BTW: It's really easy. Read
the "Content-Type"-Line! Sorry...
Hope, somebody has an idea,
my regards,
Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Negin Nickparsa
2013-09-23 18:59:10 UTC
Permalink
I have read your mail twice and still I could not get what you want
exactly. can't get the structure of the email either although you
elaborate it in details.

you have said something about human rights that I couldn't understand why?
but if you want to get the type of files fetch the structure and then you
can use disposition string, find the "attachment" and then return the
array.




Sincerely
Negin Nickparsa
Post by Domain nikha.org
Hello all,
im posting this here, because the bug report system of "php.net" is not right
place for my problem. It's not a bug, but a wish - an I found there no
"wishlist" option at all.
I'm running my own webmail-client, written in PHP. It is stable, fast and
pretty, showing the full power of the PHP imap section.
Of course it presents paginated content lists for every mailbox the user may
Sender, date, subject, size and (eventually) flags.
All these things are nicely delivered by the function
"imap_fetch_overview()"
The same could be done by calling "imap_headerinfo()" for every single mail, but
"fetch_overview" seems to be faster, because it does it at once for the whole
batch.
BUT NONE OF THEM returns any information about the MIME-Type of the mail!
Since the user of my webmail client has the intrinsic, natural born an general
human right to KNOW whether some mail in his mailbox has attachments or not, I'm
forced to do very ugly things. My script calls additionally for every (!)
actually listed mail "imap_fetchbody($connect, $msg_no, 0)" - where "$connect"
holds the result of "imap_open()".
That gives me the mail header, the script reads the line starting with
"Content-Type:" and returns its content. Evaluating this against "mixed" or
"alternative" we have finaly what we want: This mail has attachments! Or is
written in HTML, what is even more we wanted!
Works fine, but is ugly. First "fetch_overview" parses all mail headers, then
they are fetched again to be parsed for the MIME-Type. I could just omit
"fetch_overview" and read the headers by my own means, that whould be faster,
but then I loose the size information, that is NOT (and cannot) be part of the
mail header!
If I want to have both, size and MIME-Type, and I WANT to have both, respecting
the intrinsic, natural born and general human rights of my user, im must call
both, "overview" and "fetchbody".
My question is this: Is there a better solution? Or is there someone that knows
someone among the PHP-Developpers to suggest them an improvement of the
functions "imap_fetch_overivew()" and "imap_headerinfo()". Please, Please, add
the MIME-Type to your fantastic object collections! BTW: It's really easy. Read
the "Content-Type"-Line! Sorry...
Hope, somebody has an idea,
my regards,
Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Aziz Saleh
2013-09-23 20:06:25 UTC
Permalink
What Niklaus wishes for is a way to detect if an email message contains an
attachment by just reading the headers (correct me if I am wrong).

This isn't really a PHP issue. In any language you can't really figure out
if an email has an attachment by just looking at the headers, you need to
check the body. You can try to infer by using the content-type or the size,
but that isn't 100% valid.

Aziz
Post by Negin Nickparsa
I have read your mail twice and still I could not get what you want
exactly. can't get the structure of the email either although you
elaborate it in details.
you have said something about human rights that I couldn't understand why?
but if you want to get the type of files fetch the structure and then you
can use disposition string, find the "attachment" and then return the
array.
Sincerely
Negin Nickparsa
Post by Domain nikha.org
Hello all,
im posting this here, because the bug report system of "php.net" is not right
place for my problem. It's not a bug, but a wish - an I found there no
"wishlist" option at all.
I'm running my own webmail-client, written in PHP. It is stable, fast and
pretty, showing the full power of the PHP imap section.
Of course it presents paginated content lists for every mailbox the user may
Sender, date, subject, size and (eventually) flags.
All these things are nicely delivered by the function
"imap_fetch_overview()"
The same could be done by calling "imap_headerinfo()" for every single mail, but
"fetch_overview" seems to be faster, because it does it at once for the whole
batch.
BUT NONE OF THEM returns any information about the MIME-Type of the mail!
Since the user of my webmail client has the intrinsic, natural born an general
human right to KNOW whether some mail in his mailbox has attachments or not, I'm
forced to do very ugly things. My script calls additionally for every (!)
actually listed mail "imap_fetchbody($connect, $msg_no, 0)" - where "$connect"
holds the result of "imap_open()".
That gives me the mail header, the script reads the line starting with
"Content-Type:" and returns its content. Evaluating this against "mixed"
or
Post by Domain nikha.org
"alternative" we have finaly what we want: This mail has attachments! Or
is
Post by Domain nikha.org
written in HTML, what is even more we wanted!
Works fine, but is ugly. First "fetch_overview" parses all mail headers, then
they are fetched again to be parsed for the MIME-Type. I could just omit
"fetch_overview" and read the headers by my own means, that whould be faster,
but then I loose the size information, that is NOT (and cannot) be part
of
Post by Domain nikha.org
the
mail header!
If I want to have both, size and MIME-Type, and I WANT to have both, respecting
the intrinsic, natural born and general human rights of my user, im must call
both, "overview" and "fetchbody".
My question is this: Is there a better solution? Or is there someone that knows
someone among the PHP-Developpers to suggest them an improvement of the
functions "imap_fetch_overivew()" and "imap_headerinfo()". Please,
Please,
Post by Domain nikha.org
add
the MIME-Type to your fantastic object collections! BTW: It's really
easy.
Post by Domain nikha.org
Read
the "Content-Type"-Line! Sorry...
Hope, somebody has an idea,
my regards,
Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Domain nikha.org
2013-09-23 21:06:50 UTC
Permalink
Post by Negin Nickparsa
I have read your mail twice and still I could not get what you want
exactly.
Sorry for my bad english!
What I want is, that the users of my webmail client can see at a glance,
if mails in their mailboxes have attachments or not. (Thats a human
right! But of course I was joking... It's simply nice to provide this
information and should be done)
Post by Negin Nickparsa
but if you want to get the type of files fetch the structure and then
you
Post by Negin Nickparsa
can use disposition string, find the "attachment" and then return the
array.
Yes, I could do even that! But this is worse! Imagine, you do this in
the overview of the mailbox content! This can be hunderds of mails! My
script paginates this stuff in blocks of 16 (or something) mail headers,
but even then you have an huge overhead.

Why?
Because, first you must collect the sender and subject information. This
is done by "imap_fetch_overview()", parsing the mailheaders and grabing
some server data, like arrival date, size and flags.

Fine, but you still know nothing about attachments! You must do
something more. OK?

You whould run "imap_fetchstructure()", but sorry, that's the wrong time
and place. You will need this monster object only when the user _reads_
some specific mail. At the moment, we are not reading, but collecting
mails to present them in the mailbox overview.

My script modestly fetches the mailheaders again to read the
"Content-Type"-line. That's quite fast, works fine, but is stupid,
because this headers were fetched and parsed just before!

I ask you, and all PHP developpers: Why the hell this function does not
parse this line too? (a part of so much others of less importance) The
same is true for "imap_headerinfo()". And: of course this
"Content-Type"-line provides by far not the complete MIME-structure as
"imap_fetchstructure()" does, but, as said, we don't need this at the
moment.

The result is a script, that I self whould not describe as "good
practice" because of it's duplicated parsing of the same string, but I
found no other way yet.

That's my problem, you see?

Sincerely
Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Domain nikha.org
2013-09-24 02:01:41 UTC
Permalink
Post by Aziz Saleh
What Niklaus wishes for is a way to detect if an email message
contains an
Post by Aziz Saleh
attachment by just reading the headers (correct me if I am wrong).
Yes, that's what I'm seeking :-)
Post by Aziz Saleh
This isn't really a PHP issue. In any language you can't really figure
out
Post by Aziz Saleh
if an email has an attachment by just looking at the headers, you need
to
Post by Aziz Saleh
check the body. You can try to infer by using the content-type or the
size,
Post by Aziz Saleh
but that isn't 100% valid.
That's like radio Eriwan: In principle you are right!

BUT: I want not show the whole MIME-structure in the mailbox overview!
That whould be absurd, and indeed could only be done by reading the
body.

Nevertheless we have in the primary header of any MIME compliant message
the line "Content-Type". (We have it also in the headers of the attached
parts, but that is not intresting now)

In this primary header (fetched by "imap_fetchbody($mailbox, $msg_no,
0)) the leading part of the MIME-type description can have only two
values: "text" or "multipart". Right? I'm sure you will never find other
values in the _primary_ header.

That's the first decision for your script. "text: no attachment",
"multipart: attachment". No matter the subtype-value after the slash,
you have what I want! And ONLY by looking on the header. And this ist
100% valid, because it follows logically from the imap- and MIME-rfc's.

About malformed messages violating the protocols we discuss next year,
you agree? :-)

You may evaluate the subtype after the slash. If the type is multipart,
you will find "mixed", "alternative", "related" or "digest", if the type
is "text", you will have "plain" or "html" as subtype.

May be there are more subtypes on the way, but all these are optional
for the primary job, a decent mailbox overview must do: tell the user,
whether there are attachments or not.

My own webmail client does this job pretty good, but it violates my own
standard of good practice. Whether "imap_fetch-overview()" nor
"imap_headerinfo" are reading the "Content-Type"-line while parsing much
other header lines of minor importance. My script must refetch the
mailheaders to do that! This is an ugly overhead I wish to avoid.

BTW: the "squirrelmail"-staff, leading in the PHP-webmail-world, just
ignores the whole imap-extension of PHP. Instead, they talk low level
with the server. But this way is a little bit too hard for me...

Therefore my pledge to all involved into the development of the fabulous
PHP framework, section imap:
Please ad the primary MIME-type to the objects returned by
fetch_overview and headerinfo! It's so ridiculous simple: read the
"Content-Type"-line in the primary mailheader as I must do afterwards,
only because you do not!

Niklaus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Loading...