Open mean-cj opened 1 year ago
Rainloop Export/Import Address book without authentication. (csv format) please note this script not check duplicate contact name or email address.
<?php
error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
$_ENV['RAINLOOP_INCLUDE_AS_API'] = true;
include '/var/www/html/rainloop/index.php';
$oActions = \RainLoop\Actions::NewInstance();
$oConfig = \RainLoop\Api::Config();
$sDsn = \trim($oConfig->Get('contacts', 'pdo_dsn', ''));
$sUser = \trim($oConfig->Get('contacts', 'pdo_user', ''));
$sPassword = (string) $oConfig->Get('contacts', 'pdo_password', '');
$sDsnType = $oActions->ValidateContactPdoType(\trim($oConfig->Get('contacts', 'type', 'sqlite')));
if ('sqlite' === $sDsnType) {
$oDriver = new \RainLoop\Providers\AddressBook\PdoAddressBook(
'sqlite:' . APP_PRIVATE_DATA . 'AddressBook.sqlite',
'',
'',
'sqlite'
);
} else {
$oDriver = new \RainLoop\Providers\AddressBook\PdoAddressBook($sDsn, $sUser, $sPassword, $sDsnType);
}
$oAddressBookProvider = new \RainLoop\Providers\AddressBook($oDriver);
/*
|--------------------------------------------------------------------------
| Export
|--------------------------------------------------------------------------
*/
ob_start();
$oAddressBookProvider->Export('export@domain.com', 'csv');
$data = ob_get_clean();
file_put_contents('address_book.csv', $data);
/*
|--------------------------------------------------------------------------
| Import
|--------------------------------------------------------------------------
*/
$email_address_to_import = 'import@domain.com';
if ($oAddressBookProvider && $oAddressBookProvider->IsActive()) {
@\setlocale(LC_CTYPE, 'en_US.UTF-8');
if (($mData = fopen("address_book.csv", "rb")) !== FALSE) {
$sFileStart = @\fread($mData, 20);
\rewind($mData);
$sDelimiter = ((int) \strpos($sFileStart, ',') > (int) \strpos($sFileStart, ';')) ? ',' : ';';
while (false !== ($mRow = \fgetcsv($mData, 5000, $sDelimiter, '"'))) {
if (null === $aHeaders) {
if (3 >= \count($mRow)) {
return 0;
}
$aHeaders = $mRow;
foreach ($aHeaders as $iIndex => $sHeaderValue) {
$aHeaders[$iIndex] = \MailSo\Base\Utils::Utf8Clear($sHeaderValue);
}
} else {
$aNewItem = array();
foreach ($aHeaders as $iIndex => $sHeaderValue) {
$aNewItem[$sHeaderValue] = isset($mRow[$iIndex]) ? $mRow[$iIndex] : '';
}
$aData[] = $aNewItem;
}
}
}
if (\is_resource($mData)) {
@\fclose($mData);
}
if (\is_array($aData) && 0 < \count($aData)) {
echo $iCount = $oAddressBookProvider->ImportCsvArray($email_address_to_import, $aData);
}
}
Dear Rainloop Team
I need create a automation script export the address book for any email accounts without authentication. example for web control panel migration to another server.
I create a php script, My solution export work only "cvs" format. Do you have solution, API for export the vcf format ?
How to solve this ?
rainloop-export.php
app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php
/app/libraries/RainLoop/Providers/AddressBook/Classes/Contact.php
Thank you.