Utilizzo di Davmail come gateway SMTP/IMAP verso server Exchange Activesync

From RVM Wiki
Jump to navigation Jump to search

Davmail è un applicativo java che consente di accedere ai servizi di un server Exchange ActiveSync tramite protoocllo standard SMTP/IMAP/POP/CALDAV.

In pratica si installa Davmail, lo si configura per accedere all'url di Outlook Web Access e poi si configura il proprio client email per accedere alle porte predefinite su localhost. Il client email si autenticherà con le credenziali del server Exchange.

Oltre alla modalità Desktop, è possibile anche installare Davmail come webapp sotto un tomcat, e quindi lasciarla attiva su un server ed accedere alle risorse esportate smtp/imap/pop tramite questo server

Utilizzo con docker

vi docker-compose.yml
version: "3"
# https://felix.nlogn.org/projects/davmail
# mkdir logs; chown 100:100 davmail.p* logs/

services:
  davmail:
     image: connectical/davmail
     ports:
       - "1080:1080" # caldav
       - "1025:1025" # smtp
       - "1143:1143" # imap
     volumes:
       - ./logs:/var/log/davmail
       - ./davmail.properties:/etc/davmail/davmail.properties
       - ./davmail.p12:/etc/davmail/davmail.p12

  • Configure NPM ssl certificate
  • Build cert:
vi davmail-makecert.sh
#!/bin/bash
DAVMAIL_PATH="/home/docker/davmail"
NPM_CERT_PATH="/home/docker/nginx-proxy-manager/letsencrypt/live/"
NPM_CERT_ID="15"
cd DAVMAIL_PATH
openssl pkcs12 \
 -export \
 -in $NPM_CERT_PATH/npm-${NPM_CERT_ID}/fullchain.pem \
 -inkey $NPM_CERT_PATH/npm-${NPM_CERT_ID}/privkey.pem \
 -passout pass:secretPassword \
 -out davmail.p12

chown 100:100 davmail.p12
docker compose down
docker compose up -d

chmod +x davmail-makecert.sh
./davmail-makecert.sh
  • Build config
vi davmail.properties
davmail.allowRemote=true
davmail.authenticator=davmail.exchange.auth.O365Authenticator
davmail.bindAddress=
davmail.caldavAlarmSound=
davmail.caldavAutoSchedule=true
davmail.caldavPastDelay=90
davmail.caldavPort=1080
davmail.clientSoTimeout=
davmail.defaultDomain=
davmail.disableGuiNotifications=false
davmail.disableTrayActivitySwitch=false
davmail.disableUpdateCheck=true
davmail.enableEws=EWS
davmail.enableKeepAlive=true
davmail.enableKerberos=false
davmail.enableProxy=false
davmail.folderSizeLimit=0
davmail.forceActiveSyncUpdate=false
davmail.imapAlwaysApproxMsgSize=
davmail.imapAutoExpunge=true
davmail.imapIdleDelay=
davmail.imapPort=1143
davmail.keepDelay=30
davmail.ldapPort=1389
davmail.logFilePath=/var/log/davmail/davmail.log
davmail.logFileSize=1MB
davmail.mode=O365Modern
davmail.noProxyFor=
#davmail.oauth.user.name.refreshToken={AES}something #this line will be written by davmail after oauth 
davmail.popMarkReadOnRetr=false
davmail.popPort=1110
davmail.proxyHost=
davmail.proxyPassword=
davmail.proxyPort=
davmail.proxyUser=
davmail.sentKeepDelay=90
davmail.server.certificate.hash=
davmail.server=true
davmail.showStartupBanner=true
davmail.smtpPort=1025
davmail.smtpSaveInSent=true
davmail.ssl.clientKeystoreFile=
davmail.ssl.clientKeystorePass=
davmail.ssl.clientKeystoreType=
davmail.ssl.keyPass=secretPassword
davmail.ssl.keystoreFile=/etc/davmail/davmail.p12
davmail.ssl.keystorePass=secretPassword
davmail.ssl.keystoreType=PKCS12
davmail.ssl.nosecurecaldav=false
davmail.ssl.nosecureimap=false
davmail.ssl.nosecureldap=false
davmail.ssl.nosecurepop=false
davmail.ssl.nosecuresmtp=false
davmail.ssl.pkcs11Config=
davmail.ssl.pkcs11Library=
davmail.url=https://outlook.office365.com/EWS/Exchange.asmx
davmail.useSystemProxies=false
log4j.logger.davmail=INFO
log4j.logger.httpclient.wire=INFO
log4j.logger.httpclient=INFO
log4j.logger.org.apache.http.conn.ssl=INFO
log4j.logger.org.apache.http.wire=INFO
log4j.logger.org.apache.http=INFO
log4j.rootLogger=INFO

mkdir logs; chown 100:100 davmail.p* logs/
docker compose up
  • To let davmail pickup the right renewed certificate, enable the cronjob
 ln -s davmail-makecert-cron /etc/cron.d/davmail-makecert-cron
  • Be sure to use the right nging-proxy-manager certificate id NPM-CERT-ID in
 vi davmail-makecert-cron.sh
 DAVMAIL_PATH="/home/docker/davmail"
 NPM_CERT_PATH="/home/docker/nginx-proxy-manager/letsencrypt/live/"
 NPM_CERT_ID="15"


Utilizzo in modalità Desktop

  • Scaricare il pacchetto .deb dalla di Dvamail ed installarlo
  • Se si usa Unity, scaricare ed installare SystemtrayUnity
  • Lanciare Davmail e configurarlo tramite la gui
  • Configurare come server SMTP
localhost port 1025
  • UTilizare i parametri di autenticazione di Exchange

Utilizzo come Webapp Tomcat

Installazione

  • Scaricare il pacchetto WAR di Davmail
  • Fare il deploy dell'applicazione tramite Tomcat gui o copiando il war in /var/lib/tomcat9/webapps
  • Se lo si carica dal Tomcat manager, rinominarlo in davmail.war, altrimenti metterlo nella cartella davmail

Configurazione

  • Modificare il file di configurazione, impostando i parametri:
sudoedit /var/lib/tomcat9/webapps/davmail/WEB-INF/classes/davmail.properties
davmail.mode=EWS
# base Exchange OWA or EWS url
davmail.url=https://outlook.office365.com/EWS/Exchange.asmx
davmail.serve=true
davmail.allowRemote=true
davmail.logFilePath=/var/log/tomcat9/davmail.log

Autenticazione OAUTH2

  • Se il server Office365 impone l'autenticazione OAUTH2 (obbligatoria dopo 01-10-2022), dichiarare:
davmail.mode=O365Modern
log4j.logger.davmail=DEBUG


  • Riavviare l'applicazione da tomcat manager

Test

  • Testare con il proprio client email, impostando come mail server l'ip del server tomcat.
  • Le porte sono SMTP=1025 IMAP=1143
  • Username e Password sono quelle di Office365

Configurazione OAUTH2 interattiva

Se si può configurare una versione desktop, impostare

davmail.mode=O365Interactive

Al collegamento viene aperta la finestra browser per accordare l'accesso.

Ad autenticazione avvenuta, copiare nel file di configurazione del server la riga:

davmail.oauth.user.name@example.com.refreshToken={AES}xyzdsjhbfwoief9238ur320jejfdslfjslfjsofos.......=

OAUTH2 da server

  • Se si usa l'autenticazione OAUTH2, il primo login fallisce. Occorre rilevare dal log l'url:
tail -f  /var/log/tomcat9/davmail.log | grep O365Authenticator
[2022-10-03 11:57:36] [info] 2022-10-03 11:57:36,450 DEBUG [CaldavConnection-49964] davmail.exchange.auth.O365Authenticator  - Authentication successful but user consent or validation needed, please open the following url in a browser
[2022-10-03 11:57:36] [info] 2022-10-03 11:57:36,451 DEBUG [CaldavConnection-49964] davmail.exchange.auth.O365Authenticator  - https://login.microsoftonline.com/common/oauth2/authorize?client_id=facd6cff-a294-4415-b59f-c5b01937d7bd&response_type=code&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&response_mode=query&login_hint=xxxx.yyyyy%40zzzz.kkk&resource=https%3A%2F%2Foutlook.office365.com
  • Autorizzare Davmail dal browser
  • Il secondo login funzionerà.

Attivazione SSL

  • Se la connessione avviene su rete pubblica è buona norma attivare la connessione SSL
  • Se si ha un certificato già esistete, convertirlo in formato pkcs12 impostando una password NON METTERE COME PASSWORD <blank>:
cd /var/lib/tomcat9/webapps/davmail/WEB-INF/classes/
 openssl pkcs12 \
 -export \
 -in /var/lib/dehydrated/certs/servername.example.com/fullchain.pem \
 -inkey /var/lib/dehydrated/certs/servername.example.com/privkey.pem \
 -passout pass:secretPassword \
 -out davmail.p12
chown tomcat: davmail.p12
  • Modificare i parametri ssl:
 sudoedit /var/lib/tomcat9/webapps/davmail/WEB-INF/classes/davmail.properties
davmail.ssl.keystoreType=PKCS12
davmail.ssl.keyPass=secretPassword
davmail.ssl.keystoreFile=/var/lib/tomcat9/webapps/davmail/WEB-INF/classes/davmail.p12
davmail.ssl.keystorePass=secretPassword
  • Riavviare la webapp e controllare i log:
sudo tail -f /var/log/tomcat9/catalina.out
  • Cambiare nel client email la cifratura in SSL/TLS (non starttls) lasciando le porte già usate

Configurazione Calendario

  • Come percorso mettere
https://servername.example.com:1080

Riferimenti