Modification des sources pour utiliser un serveur IMAP externe

Printer-friendly versionSend to friend

Dans certains cas (comme le mien lol), il peut être pratique de configurer le webmail d'OX pour se connecter à un serveur IMAP externe. La commande changeattr_ox permet ceci, en revanche cela ne marche que si le nom d'utilisateur et le mot de passe du serveur IMAP sont les mêmes que ceux d'OX.

Ce document, qui permet d'utiliser des login/password différents pour l'IMAP, est basé sur l'article "Using a different Username for IMAP-Login" paru sur le wiki d'Open-Xchange.org.

On utilise ici les champs libres 19 et 20 de l'utilisateur interne pour stocker respectivement le
login et le password de connexion au serveur IMAP externe. Il est possible de stocker ces valeurs
dans d'autres champs (par exemple en créant des champs LDAP dans la base OX), il suffira alors de
remplacer le nom des champs dans les fichiers concernés ci-dessous.

Ces modifications sont à faire directement dans les fichiers sources d'OX, avant la compilation.

Nota : Les lignes précédées d'un + sont à ajouter, les lignes précédées d'un - sont à supprimer.
Les lignes non précédées d'un + ou d'un - sont juste là pour situer l'emplacement dans le fichier des lignes à ajouter/supprimer.

Fichier src/com/openexchange/groupware/MailFunc.java
~Ligne 47 :
import java.io.IOException;
import java.io.OutputStream;
+ import com.openexchange.groupware.ldap.Factory;
+ import com.openexchange.groupware.ldap.UserGroupHandle;
import com.openexchange.server.ComfireLogger;
import com.openexchange.thread.nasObject;

~Ligne 84 :
try {
mh = new MailHandle();
mh.setImap(no.getImapServer(), Integer.parseInt((String)no.global.get("imapport")));
- mh.initIMAPConnection(no.getUser(), no.getPassword());
+ String loginName = "";
+ try {
+ UserGroupHandle ugh = Factory.newUserGroupHandle(no.getLDAP());
+ String [] attr = new String[1];
+ attr[0] = "OXUserUserUndef19";
+ loginName= (String) ugh.getUserAttributes(no.getUser(), attr).get(attr[0]);
+ ugh.close();
+ } catch (javax.naming.NamingException ne) { ne.printStackTrace(); }
+ String loginPwd = "";
+ try {

+ UserGroupHandle ugh = Factory.newUserGroupHandle(no.getLDAP());
+ String [] attr = new String[1];
+ attr[0] = "OXUserUserUndef20";
+ loginPwd= (String) ugh.getUserAttributes(no.getPassword(), attr).get(attr[0]);
+ ugh.close();
+ } catch (javax.naming.NamingException ne) { ne.printStackTrace(); }
+ mh.initIMAPConnection(loginName, loginPwd);
int a[] = mh.checkForNewMail(GlobalConfig.getBoolean("mail_check_includes_subfolder"));

Fichier src/com/openexchange/groupware/PortalManagement.java
~Ligne 56 :
import java.util.Iterator;
import java.util.List;
+ import com.openexchange.groupware.ldap.Factory;
+ import com.openexchange.groupware.ldap.UserGroupHandle;
import com.openexchange.server.ComfireLogger;
import com.openexchange.thread.nasObject;

~Ligne 213 :
mh = new MailHandle();
mh.setImap(no.getImapServer(), Integer.parseInt((String)no.global.get("imapport")));
- mh.initIMAPConnection(no.getUser(), no.getPassword());
+ String loginName = "";
+ try {
+ UserGroupHandle ugh = Factory.newUserGroupHandle(no.getLDAP());
+ String [] attr = new String [1];
+ attr[0] = "OXUserUserUndef19";
+ loginName = (String) ugh.getUserAttributes(no.getUser(), attr).get(attr[0]);
+ ugh.close();
+ } catch(javax.naming.NamingException ne) { ne.printStackTrace(); }
+ String loginPwd = "";
+ try {
+ UserGroupHandle ugh = Factory.newUserGroupHandle(no.getLDAP());
+ String [] attr = new String [1];
+ attr[0] = "OXUserUserUndef20";
+ loginPwd = (String) ugh.getUserAttributes(no.getPassword(), attr).get(attr[0]);
+ ugh.close();
} catch(javax.naming.NamingException ne) { ne.printStackTrace(); }
+ mh.initIMAPConnection(loginName, loginPwd);
boolean withSubFolder = GlobalConfig.getBoolean("mail_check_includes_subfolder");

Fichier src/com/openexchange/webmail/data/WebmailUserSettings.java
~Ligne 124 :
public HashMap dateFormat = new HashMap();
private String signaturePosition = "below";
+ private String imapUid;
+ private String imapPwd;
public WebmailUserSettings() { }

~Ligne 264
public String getPassword () {
return (password);
}
+ public void setImapUid(String imapUid) {
+ this.imapUid = imapUid;
+ }
+ public String getImapUid(){
+ return this.imapUid;
+ }
+
+ public void setImapPwd(String imapPwd) {
+ this.imapPwd = imapPwd;
+ }
+
+ public String getImapPwd(){
+ return this.imapPwd;
+ }
public void setName (String name) {
this.name = name;

Fichier src/com/openexchange/webmail/Management.java
~Ligne 1217 :
String mailDomain = ugh.getUserAttributeMailDomainName();
+ String imapUid = "OXUserUserUndef19";
+ String imapPwd = "OXUserUserUndef20";
Map values = ugh.getUserAttributes(usr,

~Ligne 1227 :
cName, uriName, pagerName, oName, langName,
mailName, timeZoneName, imapServerName,
- smtpServerName, mailDomain });
+ smtpServerName, mailDomain, imapUid, imapPwd });
Attributes attrs = null;
Attribute attr = null;

~Ligne 1317 :
if (values.containsKey(mailDomain)) {
wus.setDomain((String)values.get(mailDomain));
}
+ if (values.containsKey(imapUid)){
+ wus.setImapUid((String)values.get(imapUid));
+ }
+
+ if (values.containsKey(imapPwd)){
+ wus.setImapPwd((String)values.get(imapPwd));
+ }
} catch (Exception e) {

~Ligne 1336 :
wdic.setImapServer(wus.getIMAPServer(), wus.getIMAPPort());
- wdic.setUsername(wus.getUsername());
- wdic.setPassword(wus.getPassword());
+ wdic.setUsername(wus.getImapUid());
+ wdic.setPassword(wus.getImapPwd());
try {

Si on veut utiliser la même méthode pour l'authentification au serveur SMTP, il faut aussi modifier
le fichier suivant :

Fichier src/com/openexchange/webmail/ComposeMessage.java
~Ligne 1595 :
- transport.connect(null, wus.getUsername(), wus.getPassword());
+ transport.connect(null, wus.getImapUid(), wus.getImapPwd());

Share this