Автоматическая конфигурация Evolution для работы с exchange

Понадобилось сконфигурировать почтовый клиент evolution для того, чтобы он работал как MS outlook - при первом входе пользователя конфигурировался автоматически, на базе данных из AD и сервиса Autodiscovery EWS.

Evolution в Gnome

Вот вариант для Gnome.
В двух словах - с помощью gconftool-2 можно выгрузить текущую конфигурацию evolution.
Скорректировать ее для нового пользователя и залить в профиль.
https://wiki.gnome.org/Apps/Evolution/GConfTools

Evolution в KDE

В KDE нужно создать файлики evolution source (~/.config/evolution/source), в которых лежит описание почтовой конфигурации.
https://wiki.gnome.org/Apps/Evolution/ESourceFileFormat
Вот скрипт, который берет из AD аттрибут пользователя mail, выполняет autodiscovery и заполняет файлики evolution source.
Также скрипт автоматически создает подпись, в которой можно использовать аттрибуты AD. Этот скрипт можно поместить в автозагрузку в дефолтный профиль (например в директорию /etc/skel/.kde/Autostart ) и тогда evolution будет автоматически конфигурировать почту на базе данных из AD, совсем как Outlook.
Для работы скрипта необходимо, чтобы системы была корректно введена домен с помощью samba+winbind. Этот скрипт создавался как часть скрипта, конфигурирующего систему на базе Ubuntu для работы в домене - Ubuntu Setup Script

#! /bin/bash

export GIO_USE_NETWORK_MONITOR=base
DOMAINNAME=`hostname -d`
########################################################################
### Check if Evolution EWS source files already exist. If exist - exit 0
#######################################################################
for f in ~/.config/evolution/sources/*$HOSTNAME.source; do [ -e "$f" ] && exit 0 ; break; done

##########################################
## Check if connected to AD
##########################################
if ! wbinfo -P; then
echo "NETLOGON test failed" >> ~/.ews_setup.log
else
echo "NETLOGON test OK" >> ~/.ews_setup.log

CURRENT_DC=`wbinfo -P | awk '{print $9}' | awk -F "\"" '{print $2}'`
BASEDN=`echo $CURRENT_DC | sed s/^[^.]*.//g | sed s/"\."/,dc=/g | sed s/^/dc=/`
FULL_NAME=`ldapsearch -h $CURRENT_DC -b "$BASEDN" "sAMAccountName=$USER" | grep displayName: | awk '{print $2 }' | base64 -d`
MAIL=`ldapsearch -h $CURRENT_DC -b "$BASEDN" "sAMAccountName=$USER" | grep mail: | awk '{print $2 }'`
NAME_PREFIX=`date +%s.%N | cut -c 1-16`

###############################################################################################
### MS Exchange autodiscovery
#### https://github.com/sys4/automx/blob/master/src/automx-test
#### http://stackoverflow.com/questions/38509837/when-using-negotiate-with-curl-is-a-keytab-file-required
#### Joined AD with samba/winbind and have package gss-ntlmssp
###############################################################################################
AUTOD_URL="https://autodiscover.`echo $MAIL | sed 's/^.*@//'`"/autodiscover/autodiscover.xml
REQUEST=$(cat <<EOF
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>$MAIL</EMailAddress>
<AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
</Request>
</Autodiscover>
EOF
)

bash -c "curl -k -d '$REQUEST' --header \"Content-Type: text/xml\" -s --negotiate -u : $AUTOD_URL" > ~/.autodiscover.xml

#bash -c "curl -v -k -d '$REQUEST' --header \"Content-Type: text/xml\" --ntlm --user username:userpassword $AUTOD_URL" > ~/.autodiscover.xml

OABUrl=$(cat ~/.autodiscover.xml | grep -m 1 OABUrl | awk -F '[<>]' '{ print $3 }')oab.xml
EwsUrl=$(cat ~/.autodiscover.xml | grep -m 1 EwsUrl | awk -F '[<>]' '{ print $3 }')
EwsHost=$(echo $EwsUrl | awk -F '/' '{ print $3 }')
rm ~/.autodiscover.xml

echo CURRENT_DC - $CURRENT_DC > ~/.ews_setup.log
echo FULL_NAME - $FULL_NAME >> ~/.ews_setup.log
echo BASEDN - $BASEDN >> ~/.ews_setup.log
echo MAIL - $MAIL >> ~/.ews_setup.log
echo DOMAINNAME - $DOMAINNAME >> ~/.ews_setup.log
echo OABUrl - $OABUrl >> ~/.ews_setup.log
echo EwsUrl - $EwsUrl >> ~/.ews_setup.log
echo EwsHost - $EwsHost >> ~/.ews_setup.log
################################################################
### Check URLs format
################################################################
echo $OABUrl | grep -E '(https|http)://(([[:alnum:]]|-|_|\.|~|!|\*|;|:|@|&|=|+|$|,|/|\?|%|#|\[|\]])*/(oab|OAB)([[:alnum:]]|-|_|\.|~|!|\*|;|:|@|&|=|+|$|,|/|\?|%|#|\[|\]])*/oab.xml)'
OAB_URL_Check=$?
echo $EwsUrl | grep -E '(https|http)://(([[:alnum:]]|-|_|\.|~|!|\*|;|:|@|&|=|+|$|,|/|\?|%|#|\[|\]])*/(ews|EWS)([[:alnum:]]|-|_|\.|~|!|\*|;|:|@|&|=|+|$|,|/|\?|%|#|\[|\]])*/exchange.asmx)'
EWS_URL_Check=$?

if [ $OAB_URL_Check != 0 ] || [ $EWS_URL_Check != 0 ]; then
echo "OAB and EWS URLs check failed... Exit..." >> ~/.ews_setup.log
else
echo "OAB and EWS URLs check OK" >> ~/.ews_setup.log

######################################################################
### CleaningUp and creating evolution source files
######################################################################
killall evolution-source-registry
rm -Rf ~/.config/evolution/sources
mkdir --parents ~/.config/evolution/sources

#####################################################################################
cat <<EOF > ~/.config/evolution/sources/$NAME_PREFIX.1@$HOSTNAME.source
[Data Source]
DisplayName=$MAIL
Enabled=true
Parent=

[Offline]
StaySynchronized=true

[Authentication]
Host=$EwsHost
Method=GSSAPI
Port=443
ProxyUid=system-proxy
RememberPassword=true
User=$USER
CredentialName=

[Collection]
BackendName=ews
CalendarEnabled=true
ContactsEnabled=true
Identity=$USER
MailEnabled=true

[Security]
Method=none

[Ews Backend]
FilterInbox=true
StoreChangesInterval=3
CheckAll=true
ListenNotifications=true
Email=$MAIL
FilterJunk=true
FilterJunkInbox=false
FoldersInitialized=true
GalUid=$NAME_PREFIX.0@$HOSTNAME
Hosturl=$EwsUrl
Oaburl=$OABUrl
OabOffline=true
OalSelected=
Timeout=300
UseImpersonation=false
ImpersonateUser=
EOF

######################################################################
cat <<EOF > ~/.config/evolution/sources/$NAME_PREFIX.0@$HOSTNAME.source
[Data Source]
DisplayName=$MAIL
Enabled=true
Parent=$NAME_PREFIX.1@$HOSTNAME

[Mail Composition]
Bcc=
Cc=
DraftsFolder=folder://$NAME_PREFIX.3%40$HOSTNAME/%d0%a7%d0%b5%d1%80%d0%bd%d0%be%d0%b2%d0%b8%d0%ba%d0%b8
SignImip=true
TemplatesFolder=folder://local/Templates

[Mail Identity]
Address=$MAIL
Name=$FULL_NAME
Organization=
ReplyTo=
SignatureUid=$NAME_PREFIX.33@$HOSTNAME

[Mail Submission]
SentFolder=folder://$NAME_PREFIX.3%40$HOSTNAME/%d0%9e%d1%82%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8b%d0%b5
TransportUid=$NAME_PREFIX.13@$HOSTNAME
RepliesToOriginFolder=false
EOF

######################################################################
cat <<EOF > ~/.config/evolution/sources/$NAME_PREFIX.3@$HOSTNAME.source
[Data Source]
DisplayName=$MAIL
Enabled=true
Parent=$NAME_PREFIX.1@$HOSTNAME

[Refresh]
Enabled=true
IntervalMinutes=3

[Mail Account]
BackendName=ews
IdentityUid=$NAME_PREFIX.0@$HOSTNAME
ArchiveFolder=
EOF

###############################################################################
cat <<EOF > ~/.config/evolution/sources/$NAME_PREFIX.13@$HOSTNAME.source
[Data Source]
DisplayName=$MAIL
Enabled=true
Parent=$NAME_PREFIX.1@$HOSTNAME

[Mail Transport]
BackendName=ews
EOF

################################################################################
cat <<EOF > ~/.config/evolution/sources/local.source
# Special built-in mail store.
[Data Source]
DisplayName=On This Computer
Enabled=false
Parent=

[Mail Account]
BackendName=maildir
IdentityUid=self
ArchiveFolder=

[Maildir Backend]
FilterInbox=true
Path=$HOME/.local/share/evolution/mail/local
EOF

########################################################################
cat <<EOF > ~/.config/evolution/sources/vfolder.source
# Special built-in mail store.

[Data Source]
DisplayName=Search Folders
Enabled=false
Parent=

[Mail Account]
BackendName=vfolder
IdentityUid=self
ArchiveFolder=

[Vfolder Backend]
FilterInbox=true
EOF

##########################################################################
mkdir --parents ~/.config/evolution/mail/
cat <<EOF > ~/.config/evolution/mail/state.ini
[GlobalFolder]
GroupByThreads=false
PreviewVisible=true

[Store $NAME_PREFIX.3@$HOSTNAME]
Expanded=true

[Search Bar]
SearchScope=mail-scope-current-folder
SearchOption=mail-search-subject-or-addresses-contain

[Folder Tree]
Selected=folder://$NAME_PREFIX.3%40$HOSTNAME/%d0%92%d1%85%d0%be%d0%b4%d1%8f%d1%89%d0%b8%d0%b5

[Folder folder://$NAME_PREFIX.3%40$HOSTNAME/%d0%92%d1%85%d0%be%d0%b4%d1%8f%d1%89%d0%b8%d0%b5]
GroupByThreads=false
PreviewVisible=true
Expanded=true

EOF

######################################################################
### Create Signature
cat <<EOF > ~/.config/evolution/sources/$NAME_PREFIX.33@$HOSTNAME.source
[Data Source]
DisplayName=$MAIL
Enabled=true
Parent=

[Mail Signature]
MimeType=text/html
EOF

mkdir --parents ~/.config/evolution/signatures/
cat <<EOF > ~/.config/evolution/signatures/$NAME_PREFIX.33@$HOSTNAME
<html><head></head><body><div><b style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; line-height: 18px;"><span style="font-size: 10pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51);">С уважением,&nbsp;<br>$FULL_NAME</span></b><span style="line-height: 18px; font-size: 10pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51);"></span><span style="line-height: 18px; font-size: 10pt; font-family: Arial, sans-serif; color: rgb(67, 150, 57);"><br><i>Даем людям уверенность и надежность!</i></span><span style="line-height: 18px; font-size: 10pt; font-family: Arial, sans-serif; color: rgb(51, 51, 51);"><br><a href="http://www.sberbank.ru/" style="color: purple;"><span style="color: blue;">www.sberbank.ru</span></a></span></div></body></html>
EOF

fi
fi

Enter your comment. Wiki syntax is allowed:
 
  • linux_faq/evolution_preconfigure.txt
  • Last modified: 2019/07/04 07:42
  • by admin