From 652d86479d3bddd8af9ba79e840e0e21ababb333 Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Tue, 23 Apr 2013 15:16:38 -0500 Subject: [PATCH] IDEMPIERE-722 Make email credentials configuration more flexible --- .../oracle/201304231000_IDEMPIERE-722.sql | 7 + .../postgresql/201304231000_IDEMPIERE-722.sql | 7 + .../src/org/compiere/model/MClient.java | 124 ++++++++++++++---- .../src/org/compiere/model/MSysConfig.java | 4 +- .../src/org/compiere/model/MUser.java | 31 ++++- .../src/org/compiere/util/EMail.java | 2 +- 6 files changed, 144 insertions(+), 31 deletions(-) create mode 100644 migration/i1.0a-release/oracle/201304231000_IDEMPIERE-722.sql create mode 100644 migration/i1.0a-release/postgresql/201304231000_IDEMPIERE-722.sql diff --git a/migration/i1.0a-release/oracle/201304231000_IDEMPIERE-722.sql b/migration/i1.0a-release/oracle/201304231000_IDEMPIERE-722.sql new file mode 100644 index 0000000000..02d8886506 --- /dev/null +++ b/migration/i1.0a-release/oracle/201304231000_IDEMPIERE-722.sql @@ -0,0 +1,7 @@ +-- Mar 11, 2013 5:56:17 PM COT +INSERT INTO AD_SysConfig (AD_SysConfig_ID,EntityType,ConfigurationLevel,Value,Description,AD_SysConfig_UU,Created,Updated,AD_Client_ID,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name) VALUES (200027,'D','C','U','From where to get the outgoing credentials for email (U : User / C : Client / S : System)','8a4f70c3-b361-431a-9357-809b9f01abc4',TO_DATE('2013-03-11 17:56:16','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2013-03-11 17:56:16','YYYY-MM-DD HH24:MI:SS'),0,0,100,'Y',100,'MAIL_SEND_CREDENTIALS') +; + +SELECT register_migration_script('201304231000_IDEMPIERE-722.sql') FROM dual +; + diff --git a/migration/i1.0a-release/postgresql/201304231000_IDEMPIERE-722.sql b/migration/i1.0a-release/postgresql/201304231000_IDEMPIERE-722.sql new file mode 100644 index 0000000000..bfb6c31b30 --- /dev/null +++ b/migration/i1.0a-release/postgresql/201304231000_IDEMPIERE-722.sql @@ -0,0 +1,7 @@ +-- Mar 11, 2013 5:56:17 PM COT +INSERT INTO AD_SysConfig (AD_SysConfig_ID,EntityType,ConfigurationLevel,Value,Description,AD_SysConfig_UU,Created,Updated,AD_Client_ID,AD_Org_ID,CreatedBy,IsActive,UpdatedBy,Name) VALUES (200027,'D','C','U','From where to get the outgoing credentials for email (U : User / C : Client / S : System)','8a4f70c3-b361-431a-9357-809b9f01abc4',TO_DATE('2013-03-11 17:56:16','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2013-03-11 17:56:16','YYYY-MM-DD HH24:MI:SS'),0,0,100,'Y',100,'MAIL_SEND_CREDENTIALS') +; + +SELECT register_migration_script('201304231000_IDEMPIERE-722.sql') FROM dual +; + diff --git a/org.adempiere.base/src/org/compiere/model/MClient.java b/org.adempiere.base/src/org/compiere/model/MClient.java index f437bb5560..2fb39a3175 100644 --- a/org.adempiere.base/src/org/compiere/model/MClient.java +++ b/org.adempiere.base/src/org/compiere/model/MClient.java @@ -17,6 +17,9 @@ *****************************************************************************/ package org.compiere.model; +import static org.compiere.model.MSysConfig.CLIENT_ACCOUNTING; +import static org.compiere.model.MSysConfig.MAIL_SEND_CREDENTIALS; + import java.io.File; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -56,7 +59,7 @@ public class MClient extends X_AD_Client /** * */ - private static final long serialVersionUID = -1242880454287104705L; + private static final long serialVersionUID = 3043792947325698506L; /** * Get client @@ -182,18 +185,6 @@ public class MClient extends X_AD_Client /** Client Info Setup Tree for Account */ private int m_AD_Tree_Account_ID; - /** - * Get SMTP Host - * @return SMTP or loaclhost - */ - public String getSMTPHost() - { - String s = super.getSMTPHost(); - if (s == null) - s = "localhost"; - return s; - } // getSMTPHost - /** * Get Client Info * @return Client Info @@ -459,9 +450,9 @@ public class MClient extends X_AD_Client return msgreturn.toString(); } // - StringBuilder msgce = new StringBuilder("Adempiere EMail Test: ").append(toString()); + StringBuilder msgce = new StringBuilder("iDempiere EMail Test: ").append(toString()); EMail email = createEMail (getRequestEMail(), - "Adempiere EMail Test",msgce.toString()); + "iDempiere EMail Test",msgce.toString()); if (email == null){ StringBuilder msgreturn = new StringBuilder("Could not create EMail: ").append(getName()); return msgreturn.toString(); @@ -852,7 +843,7 @@ public class MClient extends X_AD_Client { log.warning("From EMail incomplete: " + from + " (" + getName() + ")"); return null; - } + } // EMail email = new EMail (this, from.getEMail(), @@ -861,6 +852,9 @@ public class MClient extends X_AD_Client message, html); if (isSmtpAuthorization()) email.createAuthenticator (from.getEMailUser(), from.getEMailUserPW()); + if (from.getEMail() != null && ! from.getEMail().equalsIgnoreCase(from.getEMailUser())) { + email.setReplyTo(from.getEMail()); + } return email; } // createEMail @@ -878,21 +872,21 @@ public class MClient extends X_AD_Client private static final String CLIENT_ACCOUNTING_IMMEDIATE = "I"; public static boolean isClientAccounting() { - String ca = MSysConfig.getValue(MSysConfig.CLIENT_ACCOUNTING, + String ca = MSysConfig.getValue(CLIENT_ACCOUNTING, CLIENT_ACCOUNTING_QUEUE, // default Env.getAD_Client_ID(Env.getCtx())); return (ca.equalsIgnoreCase(CLIENT_ACCOUNTING_IMMEDIATE) || ca.equalsIgnoreCase(CLIENT_ACCOUNTING_QUEUE)); } public static boolean isClientAccountingQueue() { - String ca = MSysConfig.getValue(MSysConfig.CLIENT_ACCOUNTING, + String ca = MSysConfig.getValue(CLIENT_ACCOUNTING, CLIENT_ACCOUNTING_QUEUE, // default Env.getAD_Client_ID(Env.getCtx())); return ca.equalsIgnoreCase(CLIENT_ACCOUNTING_QUEUE); } public static boolean isClientAccountingImmediate() { - String ca = MSysConfig.getValue(MSysConfig.CLIENT_ACCOUNTING, + String ca = MSysConfig.getValue(CLIENT_ACCOUNTING, CLIENT_ACCOUNTING_QUEUE, // default Env.getAD_Client_ID(Env.getCtx())); return ca.equalsIgnoreCase(CLIENT_ACCOUNTING_IMMEDIATE); @@ -968,17 +962,91 @@ public class MClient extends X_AD_Client return (Collections.binarySearch(m_fieldAccess, aDFieldID) > 0); } - @Override - protected boolean beforeSave(boolean newRecord) - { - //gmail specific support - if ("smtp.gmail.com".equals(getSMTPHost())) - { - if (getSMTPPort() == 0) - setSMTPPort(587); + public String getRequestUser() { + // IDEMPIERE-722 + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.getRequestUser(); } - return true; + return super.getRequestUser(); + } + + @Override + public String getRequestUserPW() { + // IDEMPIERE-722 + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.getRequestUserPW(); + } + return super.getRequestUserPW(); + } + + @Override + public boolean isSmtpAuthorization() { + // IDEMPIERE-722 + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.isSmtpAuthorization(); + } + return super.isSmtpAuthorization(); + } + + @Override + public int getSMTPPort() { + // IDEMPIERE-722 + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.getSMTPPort(); + } + return super.getSMTPPort(); + } + + @Override + public boolean isSecureSMTP() { + // IDEMPIERE-722 + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.isSecureSMTP(); + } + return super.isSecureSMTP(); + } + + /** + * Get SMTP Host + * @return SMTP or loaclhost + */ + @Override + public String getSMTPHost() { + String s = null; + if (getAD_Client_ID() != 0 && isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + s = sysclient.getSMTPHost(); + } else { + s = super.getSMTPHost(); + } + if (s == null) + s = "localhost"; + return s; + } // getSMTPHost + + // IDEMPIERE-722 + private static final String MAIL_SEND_CREDENTIALS_USER = "U"; + private static final String MAIL_SEND_CREDENTIALS_CLIENT = "C"; + private static final String MAIL_SEND_CREDENTIALS_SYSTEM = "S"; + + public static boolean isSendCredentialsClient() { + String msc = MSysConfig.getValue(MAIL_SEND_CREDENTIALS, + MAIL_SEND_CREDENTIALS_USER, // default + Env.getAD_Client_ID(Env.getCtx())); + return (MAIL_SEND_CREDENTIALS_CLIENT.equalsIgnoreCase(msc)); + } + + public static boolean isSendCredentialsSystem() { + String msc = MSysConfig.getValue(MAIL_SEND_CREDENTIALS, + MAIL_SEND_CREDENTIALS_USER, // default + Env.getAD_Client_ID(Env.getCtx())); + return (MAIL_SEND_CREDENTIALS_SYSTEM.equalsIgnoreCase(msc)); } } // MClient diff --git a/org.adempiere.base/src/org/compiere/model/MSysConfig.java b/org.adempiere.base/src/org/compiere/model/MSysConfig.java index 8121ff9f05..08e36fa386 100644 --- a/org.adempiere.base/src/org/compiere/model/MSysConfig.java +++ b/org.adempiere.base/src/org/compiere/model/MSysConfig.java @@ -42,7 +42,8 @@ public class MSysConfig extends X_AD_SysConfig /** * */ - private static final long serialVersionUID = 6995907727239458114L; + private static final long serialVersionUID = -872111480299074889L; + public final static String PDF_FONT_DIR = "PDF_FONT_DIR"; public final static String TWOPACK_HANDLE_TRANSLATIONS = "2PACK_HANDLE_TRANSLATIONS"; public static final String ZK_DESKTOP_CLASS = "ZK_DESKTOP_CLASS"; @@ -109,6 +110,7 @@ public class MSysConfig extends X_AD_SysConfig public static final String SWING_OVERRIDE_TEXT_AREA_BEHAVIOUR = "SWING_OVERRIDE_TEXT_AREA_BEHAVIOUR"; public static final String MAIL_SEND_BCC_TO_ADDRESS = "MAIL_SEND_BCC_TO_ADDRESS"; public static final String MAIL_SEND_BCC_TO_FROM = "MAIL_SEND_BCC_TO_FROM"; + public static final String MAIL_SEND_CREDENTIALS = "MAIL_SEND_CREDENTIALS"; public static final String REAL_TIME_POS = "REAL_TIME_POS"; public static final String SHIPPING_DEFAULT_WEIGHT_PER_PACKAGE = "SHIPPING_DEFAULT_WEIGHT_PER_PACKAGE"; public static final String SHIPPING_SAVE_REQUEST_RESPONSE_LOG = "SHIPPING_SAVE_REQUEST_RESPONSE_LOG"; diff --git a/org.adempiere.base/src/org/compiere/model/MUser.java b/org.adempiere.base/src/org/compiere/model/MUser.java index d69e0da2d3..6c0a3cb196 100644 --- a/org.adempiere.base/src/org/compiere/model/MUser.java +++ b/org.adempiere.base/src/org/compiere/model/MUser.java @@ -56,7 +56,7 @@ public class MUser extends X_AD_User /** * */ - private static final long serialVersionUID = 239972951892250043L; + private static final long serialVersionUID = -1916348077418252152L; /** * Get active Users of BPartner @@ -1026,4 +1026,33 @@ public class MUser extends X_AD_User // org.compiere.Adempiere.startupClient(); // System.out.println ( MUser.get(Env.getCtx(), "SuperUser", "22") ); } // main /* */ + + @Override + public String getEMailUser() { + // IDEMPIERE-722 + if (MClient.isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.getRequestUser(); + } else if (MClient.isSendCredentialsClient()) { + MClient client = MClient.get(getCtx()); + return client.getRequestUser(); + } else { + return super.getEMailUser(); + } + } + + @Override + public String getEMailUserPW() { + // IDEMPIERE-722 + if (MClient.isSendCredentialsSystem()) { + MClient sysclient = MClient.get(getCtx(), 0); + return sysclient.getRequestUserPW(); + } else if (MClient.isSendCredentialsClient()) { + MClient client = MClient.get(getCtx()); + return client.getRequestUserPW(); + } else { + return super.getEMailUserPW(); + } + } + } // MUser diff --git a/org.adempiere.base/src/org/compiere/util/EMail.java b/org.adempiere.base/src/org/compiere/util/EMail.java index a704a88b2c..6dddb76190 100644 --- a/org.adempiere.base/src/org/compiere/util/EMail.java +++ b/org.adempiere.base/src/org/compiere/util/EMail.java @@ -305,7 +305,7 @@ public final class EMail implements Serializable m_msg.setReplyTo(new Address[] {m_replyTo}); // m_msg.setSentDate(new java.util.Date()); - m_msg.setHeader("Comments", "AdempiereMail"); + m_msg.setHeader("Comments", "iDempiereMail"); // m_msg.setDescription("Description"); // SMTP specifics m_msg.setAllow8bitMIME(true);