]> granicus.if.org Git - php/commitdiff
Add imap_fetchmime
authorStanislav Malyshev <stas@php.net>
Mon, 24 Jan 2011 03:52:00 +0000 (03:52 +0000)
committerStanislav Malyshev <stas@php.net>
Mon, 24 Jan 2011 03:52:00 +0000 (03:52 +0000)
NEWS
ext/imap/php_imap.c
ext/imap/php_imap.h

diff --git a/NEWS b/NEWS
index e095764b9718bef0455fdb25da466b62f47bbc89..23140d7593fa38bb1b2be13f118a4d37251fc58c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,7 @@
     (Ilia, valli at icsurselva dot ch)
 
 - IMAP extension:
+  . Implemented FR #53812 (get MIME headers of the part of the email). (Stas)
   . Fixed bug #53377 (imap_mime_header_decode() doesn't ignore \t during long
     MIME header unfolding). (Adam)
     
index d86b2893fabfefcf2f2b4b1826e7a7d7a941a7a4..01c016b6ec3ed2ceab30f40491b9023e10bfa4fe 100644 (file)
@@ -482,6 +482,7 @@ const zend_function_entry imap_functions[] = {
        PHP_FE(imap_body,                                                               arginfo_imap_body)
        PHP_FE(imap_bodystruct,                                                 arginfo_imap_bodystruct)
        PHP_FE(imap_fetchbody,                                                  arginfo_imap_fetchbody)
+       PHP_FE(imap_fetchmime,                                                  arginfo_imap_fetchbody)
        PHP_FE(imap_savebody,                                                   arginfo_imap_savebody)
        PHP_FE(imap_fetchheader,                                                arginfo_imap_fetchheader)
        PHP_FE(imap_fetchstructure,                                             arginfo_imap_fetchstructure)
@@ -2369,6 +2370,46 @@ PHP_FUNCTION(imap_fetchbody)
 
 /* }}} */
 
+
+/* {{{ proto string imap_fetchmime(resource stream_id, int msg_no, string section [, int options])
+   Get a specific body section's MIME headers */
+PHP_FUNCTION(imap_fetchmime)
+{
+       zval *streamind;
+       long msgno, flags = 0;
+       pils *imap_le_struct;
+       char *body, *sec;
+       int sec_len;
+       unsigned long len;
+       int argc = ZEND_NUM_ARGS();
+
+       if (zend_parse_parameters(argc TSRMLS_CC, "rls|l", &streamind, &msgno, &sec, &sec_len, &flags) == FAILURE) {
+               return;
+       }
+
+       if (flags && ((flags & ~(FT_UID|FT_PEEK|FT_INTERNAL)) != 0)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "invalid value for the options parameter");
+               RETURN_FALSE;
+       }
+
+       ZEND_FETCH_RESOURCE(imap_le_struct, pils *, &streamind, -1, "imap", le_imap);
+
+       if (argc < 4 || !(flags & FT_UID)) {
+               /* only perform the check if the msgno is a message number and not a UID */
+               PHP_IMAP_CHECK_MSGNO(msgno);
+       }
+
+       body = mail_fetch_mime(imap_le_struct->imap_stream, msgno, sec, &len, (argc == 4 ? flags : NIL));
+
+       if (!body) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "No body MIME information available");
+               RETURN_FALSE;
+       }
+       RETVAL_STRINGL(body, len, 1);
+}
+
+/* }}} */
+
 /* {{{ proto bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = ""[, int options = 0]])
        Save a specific body section to a file */
 PHP_FUNCTION(imap_savebody)
index d0957b1c505a56d47e7c8be4421036710e37e053..10521af3d2377dca78e771071f0ee849c787712a 100644 (file)
@@ -114,6 +114,7 @@ PHP_FUNCTION(imap_rfc822_parse_headers);
 PHP_FUNCTION(imap_body);
 PHP_FUNCTION(imap_fetchstructure);
 PHP_FUNCTION(imap_fetchbody);
+PHP_FUNCTION(imap_fetchmime);
 PHP_FUNCTION(imap_savebody);
 PHP_FUNCTION(imap_gc);
 PHP_FUNCTION(imap_expunge);