Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117879158
IMAP.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None
IMAP.php
View Options
<?php
namespace
App\Backends
;
use
App\Domain
;
use
App\User
;
class
IMAP
{
/**
* Check if an account is set up
*
* @param string $username User login (email address)
*
* @return bool True if an account exists and is set up, False otherwise
*/
public
static
function
verifyAccount
(
string
$username
):
bool
{
$config
=
self
::
getConfig
();
$imap
=
self
::
initIMAP
(
$config
,
$username
);
$folders
=
$imap
->
listMailboxes
(
''
,
'*'
);
if
(!
is_array
(
$folders
))
{
throw
new
\Exception
(
"Failed to get IMAP folders"
);
}
$imap
->
closeConnection
();
return
count
(
$folders
)
>
0
;
}
/**
* Initialize connection to IMAP
*/
private
static
function
initIMAP
(
array
$config
,
string
$login_as
=
null
)
{
$imap
=
new
\rcube_imap_generic
();
if
(
\config
(
'app.debug'
))
{
$imap
->
setDebug
(
true
,
'App
\B
ackends
\I
MAP::logDebug'
);
}
if
(
$login_as
)
{
$config
[
'options'
][
'auth_cid'
]
=
$config
[
'user'
];
$config
[
'options'
][
'auth_pw'
]
=
$config
[
'password'
];
$config
[
'options'
][
'auth_type'
]
=
'PLAIN'
;
$config
[
'user'
]
=
$login_as
;
}
$imap
->
connect
(
$config
[
'host'
],
$config
[
'user'
],
$config
[
'password'
],
$config
[
'options'
]);
if
(!
$imap
->
connected
())
{
$message
=
sprintf
(
"Login failed for %s against %s. %s"
,
$config
[
'user'
],
$config
[
'host'
],
$imap
->
error
);
\Log
::
error
(
$message
);
throw
new
\Exception
(
"Connection to IMAP failed"
);
}
return
$imap
;
}
/**
* Get LDAP configuration for specified access level
*/
private
static
function
getConfig
()
{
$uri
=
\parse_url
(
\config
(
'imap.uri'
));
$default_port
=
143
;
$ssl_mode
=
null
;
if
(
isset
(
$uri
[
'scheme'
]))
{
if
(
preg_match
(
'/^(ssl|imaps)/'
,
$uri
[
'scheme'
]))
{
$default_port
=
993
;
$ssl_mode
=
'ssl'
;
}
elseif
(
$uri
[
'scheme'
]
===
'tls'
)
{
$ssl_mode
=
'tls'
;
}
}
$config
=
[
'host'
=>
$uri
[
'host'
],
'user'
=>
\config
(
'imap.admin_login'
),
'password'
=>
\config
(
'imap.admin_password'
),
'options'
=>
[
'port'
=>
!
empty
(
$uri
[
'port'
])
?
$uri
[
'port'
]
:
$default_port
,
'ssl_mode'
=>
$ssl_mode
,
'socket_options'
=>
[
'ssl'
=>
[
'verify_peer'
=>
\config
(
'imap.verify_peer'
),
'verify_peer_name'
=>
\config
(
'imap.verify_peer'
),
'verify_host'
=>
\config
(
'imap.verify_host'
)
],
],
],
];
return
$config
;
}
/**
* Debug logging callback
*/
public
static
function
logDebug
(
$conn
,
$msg
):
void
{
$msg
=
'[IMAP] '
.
$msg
;
\Log
::
debug
(
$msg
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Apr 5, 10:48 PM (2 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7c/d8/544ebe24a0bf99908987f3ccc6e5
Default Alt Text
IMAP.php (2 KB)
Attached To
Mode
rK kolab
Attached
Detach File
Event Timeline