⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 php_imap.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	ssl_onceonlyinit ();#endif	/* lets allow NIL */	REGISTER_LONG_CONSTANT("NIL", NIL, CONST_PERSISTENT | CONST_CS);	/* set default timeout values */	mail_parameters(NIL, SET_OPENTIMEOUT, (void *) FG(default_socket_timeout));	mail_parameters(NIL, SET_READTIMEOUT, (void *) FG(default_socket_timeout));	mail_parameters(NIL, SET_WRITETIMEOUT, (void *) FG(default_socket_timeout));	mail_parameters(NIL, SET_CLOSETIMEOUT, (void *) FG(default_socket_timeout));	/* timeout constants */	REGISTER_LONG_CONSTANT("IMAP_OPENTIMEOUT", 1, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("IMAP_READTIMEOUT", 2, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("IMAP_WRITETIMEOUT", 3, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("IMAP_CLOSETIMEOUT", 4, CONST_PERSISTENT | CONST_CS);	/* Open Options */	REGISTER_LONG_CONSTANT("OP_DEBUG", OP_DEBUG, CONST_PERSISTENT | CONST_CS);	/* debug protocol negotiations */	REGISTER_LONG_CONSTANT("OP_READONLY", OP_READONLY, CONST_PERSISTENT | CONST_CS);	/* read-only open */	REGISTER_LONG_CONSTANT("OP_ANONYMOUS", OP_ANONYMOUS, CONST_PERSISTENT | CONST_CS);	/* anonymous open of newsgroup */	REGISTER_LONG_CONSTANT("OP_SHORTCACHE", OP_SHORTCACHE, CONST_PERSISTENT | CONST_CS);	/* short (elt-only) caching */	REGISTER_LONG_CONSTANT("OP_SILENT", OP_SILENT, CONST_PERSISTENT | CONST_CS);	/* don't pass up events (internal use) */	REGISTER_LONG_CONSTANT("OP_PROTOTYPE", OP_PROTOTYPE, CONST_PERSISTENT | CONST_CS);	/* return driver prototype */	REGISTER_LONG_CONSTANT("OP_HALFOPEN", OP_HALFOPEN, CONST_PERSISTENT | CONST_CS);	/* half-open (IMAP connect but no select) */	REGISTER_LONG_CONSTANT("OP_EXPUNGE", OP_EXPUNGE, CONST_PERSISTENT | CONST_CS);	/* silently expunge recycle stream */	REGISTER_LONG_CONSTANT("OP_SECURE", OP_SECURE, CONST_PERSISTENT | CONST_CS);	/* don't do non-secure authentication */	/* 	PHP re-assigns CL_EXPUNGE a custom value that can be used as part of the imap_open() bitfield	because it seems like a good idea to be able to indicate that the mailbox should be 	automatically expunged during imap_open in case the script get interrupted and it doesn't get	to the imap_close() where this option is normally placed.  If the c-client library adds other	options and the value for this one conflicts, simply make PHP_EXPUNGE higher at the top of 	this file 	*/	REGISTER_LONG_CONSTANT("CL_EXPUNGE", PHP_EXPUNGE, CONST_PERSISTENT | CONST_CS);	/* expunge silently */	/* Fetch options */	REGISTER_LONG_CONSTANT("FT_UID", FT_UID, CONST_PERSISTENT | CONST_CS);	/* argument is a UID */	REGISTER_LONG_CONSTANT("FT_PEEK", FT_PEEK, CONST_PERSISTENT | CONST_CS);	/* peek at data */	REGISTER_LONG_CONSTANT("FT_NOT", FT_NOT, CONST_PERSISTENT | CONST_CS);	/* NOT flag for header lines fetch */	REGISTER_LONG_CONSTANT("FT_INTERNAL", FT_INTERNAL, CONST_PERSISTENT | CONST_CS);	/* text can be internal strings */	REGISTER_LONG_CONSTANT("FT_PREFETCHTEXT", FT_PREFETCHTEXT, CONST_PERSISTENT | CONST_CS);	/* IMAP prefetch text when fetching header */	/* Flagging options */	REGISTER_LONG_CONSTANT("ST_UID", ST_UID, CONST_PERSISTENT | CONST_CS);	/* argument is a UID sequence */	REGISTER_LONG_CONSTANT("ST_SILENT", ST_SILENT, CONST_PERSISTENT | CONST_CS);	/* don't return results */	REGISTER_LONG_CONSTANT("ST_SET", ST_SET, CONST_PERSISTENT | CONST_CS);	/* set vs. clear */	/* Copy options */	REGISTER_LONG_CONSTANT("CP_UID", CP_UID, CONST_PERSISTENT | CONST_CS);	/* argument is a UID sequence */	REGISTER_LONG_CONSTANT("CP_MOVE", CP_MOVE, CONST_PERSISTENT | CONST_CS);	/* delete from source after copying */	/* Search/sort options */	REGISTER_LONG_CONSTANT("SE_UID", SE_UID, CONST_PERSISTENT | CONST_CS);	/* return UID */	REGISTER_LONG_CONSTANT("SE_FREE", SE_FREE, CONST_PERSISTENT | CONST_CS);	/* free search program after finished */	REGISTER_LONG_CONSTANT("SE_NOPREFETCH", SE_NOPREFETCH, CONST_PERSISTENT | CONST_CS);	/* no search prefetching */	REGISTER_LONG_CONSTANT("SO_FREE", SO_FREE, CONST_PERSISTENT | CONST_CS);	/* free sort program after finished */	REGISTER_LONG_CONSTANT("SO_NOSERVER", SO_NOSERVER, CONST_PERSISTENT | CONST_CS);	/* don't do server-based sort */	/* Status options */	REGISTER_LONG_CONSTANT("SA_MESSAGES", SA_MESSAGES , CONST_PERSISTENT | CONST_CS);	/* number of messages */	REGISTER_LONG_CONSTANT("SA_RECENT", SA_RECENT, CONST_PERSISTENT | CONST_CS);	/* number of recent messages */	REGISTER_LONG_CONSTANT("SA_UNSEEN", SA_UNSEEN , CONST_PERSISTENT | CONST_CS);	/* number of unseen messages */	REGISTER_LONG_CONSTANT("SA_UIDNEXT", SA_UIDNEXT, CONST_PERSISTENT | CONST_CS);	/* next UID to be assigned */	REGISTER_LONG_CONSTANT("SA_UIDVALIDITY", SA_UIDVALIDITY , CONST_PERSISTENT | CONST_CS);	/* UID validity value */	REGISTER_LONG_CONSTANT("SA_ALL", sa_all, CONST_PERSISTENT | CONST_CS);	/* get all status information */	/* Bits for mm_list() and mm_lsub() */	REGISTER_LONG_CONSTANT("LATT_NOINFERIORS", LATT_NOINFERIORS , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("LATT_NOSELECT", LATT_NOSELECT, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("LATT_MARKED", LATT_MARKED, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("LATT_UNMARKED", LATT_UNMARKED , CONST_PERSISTENT | CONST_CS);#ifdef LATT_REFERRAL	REGISTER_LONG_CONSTANT("LATT_REFERRAL", LATT_REFERRAL, CONST_PERSISTENT | CONST_CS);#endif#ifdef LATT_HASCHILDREN	REGISTER_LONG_CONSTANT("LATT_HASCHILDREN", LATT_HASCHILDREN, CONST_PERSISTENT | CONST_CS);#endif#ifdef LATT_HASNOCHILDREN	REGISTER_LONG_CONSTANT("LATT_HASNOCHILDREN", LATT_HASNOCHILDREN, CONST_PERSISTENT | CONST_CS);#endif	/* Sort functions */	REGISTER_LONG_CONSTANT("SORTDATE", SORTDATE , CONST_PERSISTENT | CONST_CS);	/* date */	REGISTER_LONG_CONSTANT("SORTARRIVAL", SORTARRIVAL , CONST_PERSISTENT | CONST_CS);	/* arrival date */	REGISTER_LONG_CONSTANT("SORTFROM", SORTFROM , CONST_PERSISTENT | CONST_CS);	/* from */	REGISTER_LONG_CONSTANT("SORTSUBJECT", SORTSUBJECT , CONST_PERSISTENT | CONST_CS);	/* subject */	REGISTER_LONG_CONSTANT("SORTTO", SORTTO , CONST_PERSISTENT | CONST_CS);	/* to */	REGISTER_LONG_CONSTANT("SORTCC", SORTCC , CONST_PERSISTENT | CONST_CS);	/* cc */	REGISTER_LONG_CONSTANT("SORTSIZE", SORTSIZE , CONST_PERSISTENT | CONST_CS);	/* size */	REGISTER_LONG_CONSTANT("TYPETEXT", TYPETEXT , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEMULTIPART", TYPEMULTIPART , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEMESSAGE", TYPEMESSAGE , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEAPPLICATION", TYPEAPPLICATION , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEAUDIO", TYPEAUDIO , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEIMAGE", TYPEIMAGE , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEVIDEO", TYPEVIDEO , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEMODEL", TYPEMODEL , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("TYPEOTHER", TYPEOTHER , CONST_PERSISTENT | CONST_CS);	/*	TYPETEXT                unformatted text	TYPEMULTIPART           multiple part	TYPEMESSAGE             encapsulated message	TYPEAPPLICATION         application data	TYPEAUDIO               audio	TYPEIMAGE               static image (GIF, JPEG, etc.)	TYPEVIDEO               video	TYPEMODEL               model	TYPEOTHER               unknown	*/	REGISTER_LONG_CONSTANT("ENC7BIT", ENC7BIT , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("ENC8BIT", ENC8BIT , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("ENCBINARY", ENCBINARY , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("ENCBASE64", ENCBASE64, CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("ENCQUOTEDPRINTABLE", ENCQUOTEDPRINTABLE , CONST_PERSISTENT | CONST_CS);	REGISTER_LONG_CONSTANT("ENCOTHER", ENCOTHER , CONST_PERSISTENT | CONST_CS);	/*	ENC7BIT                 7 bit SMTP semantic data	ENC8BIT                 8 bit SMTP semantic data	ENCBINARY               8 bit binary data	ENCBASE64               base-64 encoded data	ENCQUOTEDPRINTABLE      human-readable 8-as-7 bit data	ENCOTHER                unknown	*/	le_imap = zend_register_list_destructors_ex(mail_close_it, NULL, "imap", module_number);	return SUCCESS;}/* }}} *//* {{{ PHP_RINIT_FUNCTION */PHP_RINIT_FUNCTION(imap){	IMAPG(imap_errorstack) = NIL;	IMAPG(imap_alertstack) = NIL;	return SUCCESS;}/* }}} *//* {{{ PHP_RSHUTDOWN_FUNCTION */PHP_RSHUTDOWN_FUNCTION(imap){	ERRORLIST *ecur = NIL;	STRINGLIST *acur = NIL;	if (IMAPG(imap_errorstack) != NIL) {		/* output any remaining errors at their original error level */		if (EG(error_reporting) & E_NOTICE) {			ecur = IMAPG(imap_errorstack);			while (ecur != NIL) {				php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s (errflg=%ld)", ecur->LTEXT, ecur->errflg);				ecur = ecur->next;			}		}		mail_free_errorlist(&IMAPG(imap_errorstack));	}	if (IMAPG(imap_alertstack) != NIL) {		/* output any remaining alerts at E_NOTICE level */		if (EG(error_reporting) & E_NOTICE) {			acur = IMAPG(imap_alertstack);			while (acur != NIL) {				php_error_docref(NULL TSRMLS_CC, E_NOTICE, "%s", acur->LTEXT);				acur = acur->next;			}		}		mail_free_stringlist(&IMAPG(imap_alertstack));		IMAPG(imap_alertstack) = NIL;	}	return SUCCESS;}/* }}} *//* {{{ PHP_MINFO_FUNCTION */PHP_MINFO_FUNCTION(imap){	php_info_print_table_start();#if HAVE_IMAP2004	php_info_print_table_row(2, "IMAP c-Client Version", "2004");#elif HAVE_IMAP2001	php_info_print_table_row(2, "IMAP c-Client Version", "2001");#elif HAVE_IMAP2000	php_info_print_table_row(2, "IMAP c-Client Version", "2000");#elif defined(IMAP41)	php_info_print_table_row(2, "IMAP c-Client Version", "4.1");#else	php_info_print_table_row(2, "IMAP c-Client Version", "4.0");#endif#if HAVE_IMAP_SSL	php_info_print_table_row(2, "SSL Support", "enabled");#endif#if HAVE_IMAP_KRB && HAVE_IMAP_AUTH_GSS	php_info_print_table_row(2, "Kerberos Support", "enabled");#endif	php_info_print_table_end();}/* }}} *//* {{{ imap_do_open */static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent){	zval **mailbox, **user, **passwd, **options;	MAILSTREAM *imap_stream;	pils *imap_le_struct;	long flags=NIL;	long cl_flags=NIL;	int myargc = ZEND_NUM_ARGS();		if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &mailbox, &user, &passwd, &options) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	convert_to_string_ex(mailbox);	convert_to_string_ex(user);	convert_to_string_ex(passwd);	if (myargc ==4) {		convert_to_long_ex(options);		flags = Z_LVAL_PP(options);		if (flags & PHP_EXPUNGE) {			cl_flags = CL_EXPUNGE;			flags ^= PHP_EXPUNGE;		}	}	if (IMAPG(imap_user)) { 		efree(IMAPG(imap_user));	}	if (IMAPG(imap_password)) { 		efree(IMAPG(imap_password));	}	/* local filename, need to perform open_basedir and safe_mode checks */	if (Z_STRVAL_PP(mailbox)[0] != '{' && 			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) || 			(PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(mailbox), NULL, CHECKUID_CHECK_FILE_AND_DIR)))) {		RETURN_FALSE;	}	IMAPG(imap_user)     = estrndup(Z_STRVAL_PP(user), Z_STRLEN_PP(user));	IMAPG(imap_password) = estrndup(Z_STRVAL_PP(passwd), Z_STRLEN_PP(passwd));	imap_stream = mail_open(NIL, Z_STRVAL_PP(mailbox), flags);	if (imap_stream == NIL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't open stream %s", Z_STRVAL_PP(mailbox));		efree(IMAPG(imap_user)); IMAPG(imap_user) = 0;		efree(IMAPG(imap_password)); IMAPG(imap_password) = 0;		RETURN_FALSE;	}	imap_le_struct = emalloc(sizeof(pils));	imap_le_struct->imap_stream = imap_stream;	imap_le_struct->flags = cl_flags;		ZEND_REGISTER_RESOURCE(return_value, imap_le_struct, le_imap);}/* }}} *//* {{{ proto resource imap_open(string mailbox, string user, string password [, int options])   Open an IMAP stream to a mailbox */PHP_FUNCTION(imap_open){	php_imap_do_open(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);}/* }}} *//* {{{ proto bool imap_reopen(resource stream_id, string mailbox [, int options])   Reopen an IMAP stream to a new mailbox */PHP_FUNCTION(imap_reopen){	zval **streamind, **mailbox, **options;	pils *imap_le_struct; 	MAILSTREAM *imap_stream;	long flags=NIL;	long cl_flags=NIL;	int myargc=ZEND_NUM_ARGS();	if (myargc < 2 || myargc > 3 || zend_get_parameters_ex(myargc, &streamind, &mailbox, &options) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);	convert_to_string_ex(mailbox);	if (myargc == 3) {		convert_to_long_ex(options);		flags = Z_LVAL_PP(options);		if (flags & PHP_EXPUNGE) {			cl_flags = CL_EXPUNGE;			flags ^= PHP_EXPUNGE;		}		imap_le_struct->flags = cl_flags;		}	/* local filename, need to perform open_basedir and safe_mode checks */	if (Z_STRVAL_PP(mailbox)[0] != '{' && 			(php_check_open_basedir(Z_STRVAL_PP(mailbox) TSRMLS_CC) || 			(PG(safe_mode) && !php_checkuid(Z_STRVAL_PP(mailbox), NULL, CHECKUID_CHECK_FILE_AND_DIR)))) {		RETURN_FALSE;	}	imap_stream = mail_open(imap_le_struct->imap_stream, Z_STRVAL_PP(mailbox), flags);	if (imap_stream == NIL) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't re-open stream");		RETURN_FALSE;	}	imap_le_struct->imap_stream = imap_stream;	RETURN_TRUE;}/* }}} *//* {{{ proto bool imap_append(resource stream_id, string folder, string message [, string options])   Append a new message to a specified mailbox */PHP_FUNCTION(imap_append){	zval **streamind, **folder, **message, **flags;	pils *imap_le_struct; 	STRING st;	int myargc=ZEND_NUM_ARGS();  	if (myargc < 3 || myargc > 4 || zend_get_parameters_ex(myargc, &streamind, &folder, &message, &flags) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}  	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);	convert_to_string_ex(folder);	convert_to_string_ex(message);	if (myargc == 4) {		convert_to_string_ex(flags);	}	INIT (&st, mail_string, (void *) Z_STRVAL_PP(message), Z_STRLEN_PP(message));	if (mail_append_full(imap_le_struct->imap_stream, Z_STRVAL_PP(folder), myargc==4 ? Z_STRVAL_PP(flags) : NIL, NIL, &st)) {		RETURN_TRUE;	} else {		RETURN_FALSE;	}}/* }}} *//* {{{ proto int imap_num_msg(resource stream_id)   Gives the number of messages in the current mailbox */PHP_FUNCTION(imap_num_msg){	zval **streamind;	pils *imap_le_struct; 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);	RETURN_LONG(imap_le_struct->imap_stream->nmsgs);}/* }}} *//* {{{ proto bool imap_ping(resource stream_id)   Check if the IMAP stream is still active */PHP_FUNCTION(imap_ping){	zval **streamind;	pils *imap_le_struct; 	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &streamind) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(imap_le_struct, pils *, streamind, -1, "imap", le_imap);	RETURN_BOOL(mail_ping(imap_le_struct->imap_stream));}/* }}} */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -