Я работаю над обновлением версии проекта, в результате чего электронные письма извлекаются из Gmail и сохраняются в базе данных.
Я ищу альтернативу для строки №.
"$ this -> _ walk ($ obj, & $ msg [], $ main_content_type);"
, поскольку это не работает в новых версиях PHP.
Есть ли способ обойти такой же результат, который представляет собой единый массив всех почтовых значений?
function _walk( $object, $msg, $main_content_type = "" )
{
if ( !isset( $object->parts ) )
{
$ctype = "";
$ctype = trim( $object->ctype_primary ) . "/" . trim( $object->ctype_secondary );
if ( isset( $object->disposition ) && ( !strcasecmp( trim( $object->disposition ), "attachment" ) || ( !strcasecmp( trim( $object->disposition ), "inline" ) && ( ( strcasecmp( $ctype, "text/plain" ) && strcasecmp( $ctype, "text/html" ) ) ) ) ) )
{
$ctype .= trim( $object->disposition );
}
switch ( strtolower( $ctype ) )
{
case "text/html":
$msg .= $object->body;
break;
case "text/plain":
$enc = $object->headers[ 'content-transfer-encoding' ];
if ( $enc != "quoted-printable" ) {
$msg .= nl2br( $object->body );
} else {
$msg .= html_entity_decode( $object->body );
}
break;
case "image/jpeg":
case "image/gif":
case "image/jpg":
case "image/bmp":
$name = trim( $object->headers[ 'name' ] );
$cid = trim( $object->headers[ 'content-id' ] );
$cid = str_ireplace( "<", "", $cid );
$cid = str_ireplace( ">", "", $cid );
if ( empty( $name ) )
trim( strtok( $object->headers[ 'content-type' ], "=" ) );
$name = trim( strtok( "=\"" ) );
if ( empty( $name ) ) {
$name = $cid . "." . substr( $object->headers[ 'content-type' ], strrpos( $object->headers[ 'content-type' ], "/" ) + 1 );
}
$temp = $this->mailFolder . "/tmp/";
$name = mt_rand( 100, 999999 ) . "_" . $name;
@mkdir( $temp, 777 );
$tmpfile = $temp . $name;
$fp = fopen( $tmpfile, "w" );
fwrite( $fp, $object->body );
fclose( $fp );
$msg .= $name;
break;
default:
$name = trim( $object->headers[ 'name' ] );
if ( isset( $object->headers[ 'content-id' ] ) ) {
$cid = trim( $object->headers[ 'content-id' ] );
$cid = str_ireplace( "<", "", $cid );
$cid = str_ireplace( ">", "", $cid );
$extension = substr( $object->headers[ 'content-type' ], strpos( $object->headers[ 'content-type' ], "/" ) + 1, strpos( $object->headers[ 'content-type' ], ";" ) - strpos( $object->headers[ 'content-type' ], "/" ) - 1 );
$name = $cid . "." . $extension;
}
if ( isset( $object->ctype_parameters[ 'name' ] ) ) {
$name = trim( $object->ctype_parameters[ 'name' ] );
}
if ( empty( $name ) && isset( $object->d_parameters[ 'filename' ] ) ) {
$name = trim( $object->d_parameters[ 'filename' ] );
}
if ( empty( $name ) && strrpos( trim( $object->headers[ 'content-type' ] ), "=" ) !== FALSE ) {
$name = substr( trim( $object->headers[ 'content-type' ] ), strrpos( trim( $object->headers[ 'content-type' ] ), "=" ) + 2, -1 );
}
if ( empty( $name ) ) {
$name = 'ForwardedMessage.eml';
}
$temp = $this->mailFolder . "/tmp/";
$name = mt_rand( 100, 999999 ) . "_" . $name;
@mkdir( $temp, 777 );
$tmpfile = $temp . $name;
$fp = fopen( $tmpfile, "w" );
fwrite( $fp, $object->body );
fclose( $fp );
$msg .= $name;
break;
}
} else {
foreach ( $object->parts as $obj ) {
$this->_walk( $obj, &$msg[], $main_content_type );
}
}
return $msg;
}