So this is how I managed to export contacts SMTP addresses from a exchange 2013 mailbox using an admin user with impersonate rights:

#admin should have impersonate rights
$admin = "admin@domain.com"
$user = "user@domain.com"
#First Find Microsoft.Exchange.WebServices.dll location
$dllpath = "D:\Exchange Server\Bin\Microsoft.Exchange.WebServices.dll"
Import-Module $dllpath
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)
#admin account credentials
$psCred = Get-Credential
$creds = New-Object System.Net.NetworkCredential($psCred.UserName.ToString(), $psCred.GetNetworkCredential().password.ToString())
$service.Credentials = $creds
$service.AutodiscoverUrl($admin ,{$true})
$service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$user);
$contactsFolder = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Contacts,$user)
$contacts = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$contactsFolder)
$view = new-object Microsoft.Exchange.WebServices.Data.ItemView($contacts.TotalCount, 0)
$results = $contacts.FindItems($view)
$response = $service.LoadPropertiesForItems($results, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstClassProperties)
foreach ($item in $results){
echo $item.Item.EmailAddresses[[Microsoft.Exchange.WebServices.Data.EmailAddressKey]::EmailAddress1].Address
}