Utiliser un serveur de messagerie externe

Printer-friendly versionSend to friend

MODIFICATION DES SOURCES D'OX POUR UTILISER UN SERVEUR DE MESSAGERIE EXTERNE
Bastien Le Gonidec / Nov-2005
////////////////////////////////////////////////////////////////////////////////////////////////////
Ce document est basé sur l'article "Using a different Username for IMAP-Login" paru
sur le wiki
d'Open-Xchange
////////////////////////////////////////////////////////////////////////////////////////////////////

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.
(note de Nicolas : il s'agit d'un fichier diff)

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"));
        --------------------------------------------------------------------------------------------


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");
        --------------------------------------------------------------------------------------------


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;
        --------------------------------------------------------------------------------------------


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 :

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