Author: solomax
Date: Fri Mar 1 08:13:18 2013
New Revision: 1451518
URL: http://svn.apache.org/r1451518
Log:
[OPENMEETINGS-327] Restart Save Mail-Queue is implemented
Added:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/MailMessageDao.java
Removed:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailThread.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailiCalThread.java
Modified:
openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/FeedbackManager.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/InvitationManager.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/EmailManager.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/basic/MailMessage.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailHandler.java
Modified:
openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
(original)
+++
openmeetings/trunk/singlewebapp/WebContent/WEB-INF/openmeetings-applicationContext.xml
Fri Mar 1 08:13:18 2013
@@ -171,12 +171,57 @@
</property>
</bean>
+ <!-- Mail related jobs -->
+ <bean id="mailHandler"
class="org.apache.openmeetings.utils.mail.MailHandler" />
+ <bean id="resetSendingMailStatus"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+ <property name="targetObject">
+ <ref bean="mailHandler" />
+ </property>
+ <property name="targetMethod">
+ <value>resetSendingStatus</value>
+ </property>
+ <property name="concurrent" value="false" />
+ </bean>
+ <bean id="triggerResetSendingMailStatus"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
+ <property name="jobDetail">
+ <ref bean="resetSendingMailStatus" />
+ </property>
+ <property name="startDelay">
+ <value>60000</value> <!-- 1 minute -->
+ </property>
+ <property name="repeatInterval">
+ <value>900000</value> <!-- 15 minutes -->
+ </property>
+ </bean>
+ <bean id="sendMails"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
+ <property name="targetObject">
+ <ref bean="mailHandler" />
+ </property>
+ <property name="targetMethod">
+ <value>sendMails</value>
+ </property>
+ <property name="concurrent" value="false" />
+ </bean>
+ <bean id="triggerSendMails"
class="org.springframework.scheduling.quartz.SimpleTriggerBean">
+ <property name="jobDetail">
+ <ref bean="sendMails" />
+ </property>
+ <property name="startDelay">
+ <value>180000</value> <!-- 3 minute -->
+ </property>
+ <property name="repeatInterval">
+ <value>180000</value> <!-- 3 minutes -->
+ </property>
+ </bean>
+
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="triggerSessionClear" />
<ref local="triggerMeetingReminder" />
<ref local="triggerTestSetupCleanup" />
+ <ref local="triggerResetSendingMailStatus" />
+ <ref local="triggerSendMails" />
</list>
</property>
</bean>
@@ -234,14 +279,13 @@
<bean id="serverDao"
class="org.apache.openmeetings.data.basic.dao.ServerDao" />
<bean id="chatDao" class="org.apache.openmeetings.data.chat.ChatDao" />
<bean id="clientDao"
class="org.apache.openmeetings.data.conference.dao.ClientDao" />
-
+ <bean id="mailMessageDao"
class="org.apache.openmeetings.data.basic.dao.MailMessageDao" />
<!-- No Interface -->
<bean id="manageCryptStyle"
class="org.apache.openmeetings.utils.crypt.ManageCryptStyle" />
<bean id="generateImage"
class="org.apache.openmeetings.documents.GenerateImage" />
<bean id="generateThumbs"
class="org.apache.openmeetings.documents.GenerateThumbs" />
<bean id="generatePDF"
class="org.apache.openmeetings.documents.GeneratePDF" />
- <bean id="mailHandler"
class="org.apache.openmeetings.utils.mail.MailHandler" />
<bean id="smsHandler"
class="org.apache.openmeetings.utils.sms.SMSHandler" />
<bean id="feedbackManagement"
class="org.apache.openmeetings.data.conference.FeedbackManager" />
<bean id="importInitvalues"
class="org.apache.openmeetings.installation.ImportInitvalues" />
@@ -271,9 +315,6 @@
<property name="queueCapacity" value="25" />
</bean>
- <bean id="mailThread"
class="org.apache.openmeetings.utils.mail.MailThread" />
- <bean id="mailiCalThread"
class="org.apache.openmeetings.utils.mail.MailiCalThread" />
-
<!-- Axis2 Service Proxy's -->
<bean id="userWebService"
class="org.apache.openmeetings.axis.services.UserWebService" />
<bean id="roomWebService"
class="org.apache.openmeetings.axis.services.RoomWebService" />
Added:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/MailMessageDao.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/MailMessageDao.java?rev=1451518&view=auto
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/MailMessageDao.java
(added)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/basic/dao/MailMessageDao.java
Fri Mar 1 08:13:18 2013
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") + you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openmeetings.data.basic.dao;
+
+import java.util.Calendar;
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.apache.openmeetings.data.IDataProviderDao;
+import org.apache.openmeetings.persistence.beans.basic.MailMessage;
+import org.apache.openmeetings.persistence.beans.basic.MailMessage.Status;
+import org.springframework.transaction.annotation.Transactional;
+
+@Transactional
+public class MailMessageDao implements IDataProviderDao<MailMessage> {
+ @PersistenceContext
+ private EntityManager em;
+
+ public MailMessage get(long id) {
+ return em.createNamedQuery("getMailMessageById",
MailMessage.class).setParameter("id", id).getSingleResult();
+ }
+
+ public List<MailMessage> get(int start, int count) {
+ return em.createNamedQuery("getMailMessages",
MailMessage.class).setParameter("status", Status.NONE)
+
.setFirstResult(start).setMaxResults(count).getResultList();
+ }
+
+ public List<MailMessage> get(String search, int start, int count,
String order) {
+ return get(start, count);
+ }
+
+ public long count() {
+ return em.createNamedQuery("countMailMessages",
Long.class).setParameter("status", Status.NONE)
+ .getSingleResult();
+ }
+
+ public long count(String search) {
+ return count();
+ }
+
+ public void resetSendingStatus(Calendar date) {
+ em.createQuery("UPDATE MailMessage m SET m.status = :noneStatus
WHERE m.status = :sendingStatus " +
+ " AND m.updated < :date")
+ .setParameter("noneStatus", Status.NONE)
+ .setParameter("sendingStatus", Status.SENDING)
+ .setParameter("date", date)
+ .executeUpdate();
+ }
+
+ public MailMessage update(MailMessage m, Long userId) {
+ if (m.getId() == null) {
+ m.setInserted(Calendar.getInstance());
+ em.persist(m);
+ } else {
+ m.setUpdated(Calendar.getInstance());
+ m = em.merge(m);
+ }
+ return m;
+ }
+
+ public void delete(MailMessage m, Long userId) {
+ em.remove(m);
+ }
+}
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/FeedbackManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/FeedbackManager.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/FeedbackManager.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/FeedbackManager.java
Fri Mar 1 08:13:18 2013
@@ -48,11 +48,11 @@ public class FeedbackManager {
String template =
feedbackTemplate.getFeedBackTemplate(username,
email, message, default_lang_id);
- return
mailHandler.sendMail("[email protected]",
+ mailHandler.send("[email protected]",
fieldManager.getString(499L,
default_lang_id), template);
-
+ return "success";
} catch (Exception err) {
- log.error("sendInvitationLink", err);
+ log.error("sendFeedback", err);
}
return null;
}
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/InvitationManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/InvitationManager.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/InvitationManager.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/conference/InvitationManager.java
Fri Mar 1 08:13:18 2013
@@ -40,6 +40,7 @@ import org.apache.openmeetings.data.cale
import org.apache.openmeetings.data.conference.dao.RoomDao;
import org.apache.openmeetings.data.user.UserManager;
import org.apache.openmeetings.data.user.dao.UsersDao;
+import org.apache.openmeetings.persistence.beans.basic.MailMessage;
import org.apache.openmeetings.persistence.beans.basic.OmTimeZone;
import org.apache.openmeetings.persistence.beans.calendar.Appointment;
import org.apache.openmeetings.persistence.beans.calendar.MeetingMember;
@@ -51,7 +52,6 @@ import org.apache.openmeetings.utils.cry
import org.apache.openmeetings.utils.crypt.ManageCryptStyle;
import org.apache.openmeetings.utils.mail.IcalHandler;
import org.apache.openmeetings.utils.mail.MailHandler;
-import org.apache.openmeetings.utils.mail.MailiCalThread;
import org.apache.openmeetings.utils.math.CalendarPatterns;
import org.apache.openmeetings.utils.math.TimezoneUtil;
import org.apache.openmeetings.utils.sms.SMSHandler;
@@ -90,8 +90,6 @@ public class InvitationManager {
@Autowired
private MailHandler mailHandler;
@Autowired
- private MailiCalThread mailiCalThread;
- @Autowired
private SMSHandler smsHandler;
@Autowired
private InvitationTemplate invitationTemplate;
@@ -631,8 +629,8 @@ public class InvitationManager {
fromUserField, message,
invitation_link, language_id, dStart,
dEnd);
- return mailHandler.sendMail(email, replyTo, subject,
template);
-
+ mailHandler.send(email, replyTo, subject, template);
+ return "success";
} catch (Exception err) {
log.error("sendInvitationLink", err);
}
@@ -658,9 +656,14 @@ public class InvitationManager {
String invitation_link = baseUrl + "?invitationHash="
+ invitationHash;
- return mailHandler.sendMail(email, subject
+ mailHandler.send(new MailMessage(
+ email
+ , null
+ , subject
, message + "<br/><a href='" +
invitation_link + "'>"
- +
fieldManager.getFieldByIdAndLanguage(626L, langId) + "</a>");
+ +
fieldManager.getFieldByIdAndLanguage(626L, langId) + "</a>"), true);
+
+ return "success";
} catch (Exception e) {
log.error("sendInvitationReminderLink", e);
}
@@ -700,7 +703,8 @@ public class InvitationManager {
String cancelling_person, String subject, String
message) {
log.debug("sendInvitationCancelmail");
try {
- return mailHandler.sendMail(email, subject, message);
+ mailHandler.send(email, subject, message);
+ return "success";
} catch (Exception e) {
log.error("sendInvitationCancelmail : " +
e.getMessage());
}
@@ -724,7 +728,8 @@ public class InvitationManager {
String replyTo, String subject, String message) {
log.debug("sendInvitationUpdateMail");
try {
- return mailHandler.sendMail(email, replyTo, subject,
message);
+ mailHandler.send(email, replyTo, subject, message);
+ return "success";
} catch (Exception e) {
log.error("sendInvitationUpdateMail : " +
e.getMessage());
}
@@ -752,8 +757,7 @@ public class InvitationManager {
User user = userManager.getUserById(organizer_userId);
// TODO: Check time zone handling in iCal Mail
- // OmTimeZone omTimeZone =
- // omTimeZoneDaoImpl.getOmTimeZone(jNameTimeZone);
+ // OmTimeZone omTimeZone =
omTimeZoneDaoImpl.getOmTimeZone(jNameTimeZone);
IcalHandler handler = new
IcalHandler(IcalHandler.ICAL_METHOD_CANCEL);
@@ -777,8 +781,7 @@ public class InvitationManager {
log.debug(handler.getICalDataAsString());
- mailiCalThread.doSend(email, user.getAdresses().getEmail(),
subject, handler.getIcalAsByteArray(),
- message);
+ mailHandler.send(new MailMessage(email,
user.getAdresses().getEmail(), subject, message, handler.getIcalAsByteArray()));
return null;
}
@@ -823,8 +826,7 @@ public class InvitationManager {
log.debug(handler.getICalDataAsString());
- mailiCalThread.doSend(email, user.getAdresses().getEmail(),
subject, handler.getIcalAsByteArray(),
- message);
+ mailHandler.send(new MailMessage(email,
user.getAdresses().getEmail(), subject, message, handler.getIcalAsByteArray()));
return null;
}
@@ -907,12 +909,9 @@ public class InvitationManager {
log.debug(handler.getICalDataAsString());
- mailiCalThread.doSend(email, replyToEmail, subject,
handler.getIcalAsByteArray(),
- template);
+ mailHandler.send(new MailMessage(email, replyToEmail,
subject, template, handler.getIcalAsByteArray()));
return "success";
- // return MailHandler.sendMail(email, subject,
template);
-
} catch (Exception err) {
log.error("sendInvitionIcalLink", err);
}
@@ -952,8 +951,8 @@ public class InvitationManager {
invitation_link, default_lang_id, starttime,
endtime);
- return mailHandler.sendMail(email, replyTo,
subject, template);
-
+ mailHandler.send(email, replyTo, subject,
template);
+ return "success";
}
} catch (Exception err) {
log.error("sendInvitationLink", err);
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/EmailManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/EmailManager.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/EmailManager.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/EmailManager.java
Fri Mar 1 08:13:18 2013
@@ -68,7 +68,6 @@ public class EmailManager {
*/
public String sendMail(String Username, String Userpass, String EMail,
String link, Boolean sendEmailWithVerficationCode) {
- String succ = "valid email";
Integer sendEmailAtRegister =
configurationDao.getConfValue("sendEmailAtRegister", Integer.class, "0");
@@ -76,30 +75,22 @@ public class EmailManager {
Long default_lang_id =
configurationDao.getConfValue("default_lang_id", Long.class, "1");
+ String template = null;
if (sendEmailWithVerficationCode) {
-
String verification_url = link;
- String template = registerUserTemplate
+ template = registerUserTemplate
.getRegisterUserWithVerificationTemplate(Username,
Userpass,
EMail, default_lang_id,
verification_url);
-
- succ = mailHandler.sendMail(EMail,
fieldManager.getString(512L, default_lang_id), template);
-
} else {
-
- String template = registerUserTemplate
+ template = registerUserTemplate
.getRegisterUserTemplate(Username, Userpass, EMail,
default_lang_id);
-
- succ = mailHandler.sendMail(EMail,
fieldManager.getString(512L, default_lang_id), template);
}
-
- return succ;
- } else {
- return "success";
+ mailHandler.send(EMail, fieldManager.getString(512L,
default_lang_id), template);
}
+ return "success";
}
public String addEmailCon(String EMail, int CONTACT_ID) {
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/data/user/UserManager.java
Fri Mar 1 08:13:18 2013
@@ -1298,7 +1298,7 @@ public class UserManager {
String template =
resetPasswordTemplate.getResetPasswordTemplate(
reset_link, default_lang_id);
- mailHandler.sendMail(email, fieldManager.getString(517L,
default_lang_id), template);
+ mailHandler.send(email, fieldManager.getString(517L,
default_lang_id), template);
}
/**
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/basic/MailMessage.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/basic/MailMessage.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/basic/MailMessage.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/persistence/beans/basic/MailMessage.java
Fri Mar 1 08:13:18 2013
@@ -18,21 +18,43 @@
*/
package org.apache.openmeetings.persistence.beans.basic;
+import java.util.Calendar;
+
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.NamedQueries;
+import javax.persistence.NamedQuery;
import javax.persistence.Table;
+import org.apache.openmeetings.persistence.beans.IDataProviderEntity;
+
@Entity
+@NamedQueries({
+ @NamedQuery(name = "getMailMessageById", query = "SELECT m FROM
MailMessage m WHERE m.id = :id")
+ , @NamedQuery(name = "getMailMessages"
+ , query = "SELECT m FROM MailMessage m WHERE m.status = :status
ORDER BY m.updated, m.inserted")
+ , @NamedQuery(name = "countMailMessages", query = "SELECT COUNT(m) FROM
MailMessage m WHERE m.status = :status")
+})
@Table(name = "email")
-public class MailMessage {
+public class MailMessage implements IDataProviderEntity {
+ public enum Status {
+ NONE
+ , SENDING
+ , DONE
+ }
+
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
+ @Lob
@Column(name = "recipients")
private String recipients;
@@ -42,12 +64,36 @@ public class MailMessage {
@Column(name = "subject")
private String subject;
+ @Lob
@Column(name = "body")
private String body;
- @Column(name = "processed")
- private boolean processed;
+ @Lob
+ @Column(name = "ics")
+ private byte[] ics;
+
+ @Column(name = "status", nullable = false)
+ @Enumerated(EnumType.STRING)
+ private Status status = Status.NONE;
+ @Column(name = "inserted")
+ private Calendar inserted;
+
+ @Column(name = "updated")
+ private Calendar updated;
+
+ public MailMessage(String recipients, String replyTo, String subject,
String body) {
+ this(recipients, replyTo, subject, body, null);
+ }
+
+ public MailMessage(String recipients, String replyTo, String subject,
String body, byte[] ics) {
+ this.recipients = recipients;
+ this.replyTo = replyTo;
+ this.subject = subject;
+ this.body = body;
+ this.ics = ics;
+ }
+
public Long getId() {
return id;
}
@@ -88,11 +134,35 @@ public class MailMessage {
this.body = body;
}
- public boolean isProcessed() {
- return processed;
+ public Status getStatus() {
+ return status;
+ }
+
+ public void setStatus(Status status) {
+ this.status = status;
+ }
+
+ public Calendar getInserted() {
+ return inserted;
+ }
+
+ public void setInserted(Calendar inserted) {
+ this.inserted = inserted;
+ }
+
+ public Calendar getUpdated() {
+ return updated;
+ }
+
+ public void setUpdated(Calendar updated) {
+ this.updated = updated;
+ }
+
+ public byte[] getIcs() {
+ return ics;
}
- public void setProcessed(boolean processed) {
- this.processed = processed;
+ public void setIcs(byte[] ics) {
+ this.ics = ics;
}
}
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/UserService.java
Fri Mar 1 08:13:18 2013
@@ -716,7 +716,7 @@ public class UserService {
denyLinkHTML,
profileLinkHTML);
if (userToAdd.getAdresses() != null) {
-
mailHandler.sendMail(userToAdd.getAdresses().getEmail(),
+
mailHandler.send(userToAdd.getAdresses().getEmail(),
user.getFirstname() + "
" + user.getLastname()
+ " " +
fValue1193.getValue(), template);
}
@@ -915,7 +915,7 @@ public class UserService {
false, null,
false, 0L, user.getAdresses()
.getEmail());
-
mailHandler.sendMail(user.getAdresses().getEmail(),
+
mailHandler.send(user.getAdresses().getEmail(),
userContacts.getContact().getFirstname()
+ " "
+ userContacts.getContact()
@@ -1171,7 +1171,7 @@ public class UserService {
+
labelid504.getValue() + "</a><br/>";
}
- mailHandler.sendMail(email,
fValue1301.getValue() + " "
+ mailHandler.send(email,
fValue1301.getValue() + " "
+ subject,
message.replaceAll("\\<.*?>", "")
+ aLinkHTML +
invitation_link);
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/remote/red5/ScopeApplicationAdapter.java
Fri Mar 1 08:13:18 2013
@@ -146,7 +146,7 @@ public class ScopeApplicationAdapter ext
for (String scopeName : scope.getScopeNames()) {
log.debug("scopeName :: " + scopeName);
}
-
+
ScopeApplicationAdapter.initComplete = true;
log.debug("\n" +
"\t################################################\n" +
Modified:
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailHandler.java
URL:
http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailHandler.java?rev=1451518&r1=1451517&r2=1451518&view=diff
==============================================================================
---
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailHandler.java
(original)
+++
openmeetings/trunk/singlewebapp/src/org/apache/openmeetings/utils/mail/MailHandler.java
Fri Mar 1 08:13:18 2013
@@ -18,10 +18,35 @@
*/
package org.apache.openmeetings.utils.mail;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Properties;
+
+import javax.activation.DataHandler;
+import javax.mail.BodyPart;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Transport;
+import javax.mail.internet.InternetAddress;
+import javax.mail.internet.MimeBodyPart;
+import javax.mail.internet.MimeMessage;
+import javax.mail.internet.MimeMultipart;
+import javax.mail.util.ByteArrayDataSource;
+
import org.apache.openmeetings.OpenmeetingsVariables;
+import org.apache.openmeetings.data.basic.dao.ConfigurationDao;
+import org.apache.openmeetings.data.basic.dao.MailMessageDao;
+import org.apache.openmeetings.persistence.beans.basic.MailMessage;
+import org.apache.openmeetings.persistence.beans.basic.MailMessage.Status;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.task.TaskExecutor;
/**
*
@@ -31,40 +56,171 @@ import org.springframework.beans.factory
public class MailHandler {
private static final Logger log = Red5LoggerFactory.getLogger(
MailHandler.class, OpenmeetingsVariables.webAppRootKey);
+ private static final int MAIL_SEND_TIMEOUT = 60 * 60 * 1000; // 1 hour
@Autowired
- private MailThread mailThread;
+ private ConfigurationDao cfgDao;
+ @Autowired
+ private TaskExecutor taskExecutor;
+ @Autowired
+ private MailMessageDao mailMessageDao;
+
+ protected MimeMessage appendIcsBody(MimeMessage msg, MailMessage m)
throws Exception {
+ log.debug("setMessageBody for iCal message");
+ // -- Create a new message --
+ Multipart multipart = new MimeMultipart();
+
+ Multipart multiBody = new MimeMultipart("alternative");
+ BodyPart html = new MimeBodyPart();
+ html.setDataHandler(new DataHandler(new
ByteArrayDataSource(m.getBody(), "text/html; charset=UTF-8")));
+ multiBody.addBodyPart(html);
+
+ BodyPart iCalContent = new MimeBodyPart();
+ iCalContent.addHeader("content-class",
"urn:content-classes:calendarmessage");
+ iCalContent.setDataHandler(new DataHandler(new
ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+ "text/calendar; charset=UTF-8;
method=REQUEST")));
+ multiBody.addBodyPart(iCalContent);
+ BodyPart body = new MimeBodyPart();
+ body.setContent(multiBody);
+ multipart.addBodyPart(body);
+
+ BodyPart iCalAttachment = new MimeBodyPart();
+ iCalAttachment.setDataHandler(new DataHandler(new
ByteArrayDataSource(new ByteArrayInputStream(m.getIcs()),
+ "application/ics")));
+ iCalAttachment.removeHeader("Content-Transfer-Encoding");
+ iCalAttachment.addHeader("Content-Transfer-Encoding", "base64");
+ iCalAttachment.removeHeader("Content-Type");
+ iCalAttachment.addHeader("Content-Type", "application/ics");
+ iCalAttachment.setFileName("invite.ics");
+ multipart.addBodyPart(iCalAttachment);
+
+ msg.setContent(multipart);
+ return msg;
+ }
+
+ private MimeMessage appendBody(MimeMessage msg, MailMessage m) throws
MessagingException, IOException {
+ // -- Set the subject and body text --
+ msg.setDataHandler(new DataHandler(new
ByteArrayDataSource(m.getBody(), "text/html; charset=\"utf-8\"")));
- /**
- * send mail to address
- *
- * @param toEmail
- * @param subj
- * @param message
- * @return "success" or "Error: err description"
- */
- public String sendMail(String toEmail, String subj, String message) {
- return sendMail(toEmail, null, subj, message);
- }
-
- /**
- * send mail to address
- *
- * @param toEmail
- * @param replyTo
- * @param subj
- * @param message
- * @return "success" or "Error: err description"
- */
- public String sendMail(String toEmail, String replyTo, String subj,
String message) {
- try {
- mailThread.doSend(toEmail, replyTo, subj, message);
-
- return "success";
-
- } catch (Exception ex) {
- log.error("[sendMail] ", ex);
- return "Error: " + ex;
+ // -- Set some other header information --
+ msg.setHeader("X-Mailer", "XML-Mail");
+ msg.setSentDate(new Date());
+
+ return msg;
+ }
+
+ private MimeMessage getBasicMimeMessage() throws Exception {
+ log.debug("getBasicMimeMessage");
+
+ // Evaluating Configuration Data
+ String smtpServer = cfgDao.getConfValue("smtp_server",
String.class, null);
+ String smtpPort = cfgDao.getConfValue("smtp_port",
String.class, "25");
+ String from = cfgDao.getConfValue("system_email_addr",
String.class, null);
+ String mailAuthUser = cfgDao.getConfValue("email_username",
String.class, null);
+ String mailAuthPass = cfgDao.getConfValue("email_userpass",
String.class, null);
+
+ Properties props = System.getProperties();
+
+ props.put("mail.smtp.host", smtpServer);
+ props.put("mail.smtp.port", smtpPort);
+
+ if ("1".equals(cfgDao.getConfValue("mail.smtp.starttls.enable",
String.class, "0"))) {
+ props.put("mail.smtp.starttls.enable", "true");
+ }
+
+ // Check for Authentication
+ Session session = null;
+ if (mailAuthUser != null && mailAuthUser.length() > 0
+ && mailAuthPass != null &&
mailAuthPass.length() > 0) {
+ // use SMTP Authentication
+ props.put("mail.smtp.auth", "true");
+ session = Session.getDefaultInstance(props, new
SmtpAuthenticator(mailAuthUser, mailAuthPass));
+ } else {
+ // not use SMTP Authentication
+ session = Session.getDefaultInstance(props, null);
+ }
+
+ // Building MimeMessage
+ MimeMessage msg = new MimeMessage(session);
+ msg.setFrom(new InternetAddress(from));
+ return msg;
+ }
+
+ private MimeMessage getMimeMessage(MailMessage m) throws Exception {
+ log.debug("getMimeMessage");
+ // Building MimeMessage
+ MimeMessage msg = getBasicMimeMessage();
+ msg.setSubject(m.getSubject());
+ String replyTo = m.getReplyTo();
+ if (replyTo != null &&
"1".equals(cfgDao.getConfValue("inviter.email.as.replyto", String.class, "1")))
{
+ log.debug("setReplyTo " + replyTo);
+ if (MailUtil.matches(replyTo)) {
+ msg.setReplyTo(new InternetAddress[]{new
InternetAddress(replyTo)});
+ }
+ }
+ msg.addRecipients(Message.RecipientType.TO,
InternetAddress.parse(m.getRecipients(), false));
+
+ return m.getIcs() == null ? appendBody(msg, m) :
appendIcsBody(msg, m);
+ }
+
+ public void send(String toEmail, String subj, String message) {
+ send(toEmail, null, subj, message);
+ }
+
+ public void send(String toEmail, String replyTo, String subj, String
message) {
+ send(new MailMessage(toEmail, replyTo, subj, message));
+ }
+
+ public void send(MailMessage m) {
+ send(m, false);
+ }
+
+ public void send(final MailMessage m, boolean send) {
+ if (send) {
+ if (m.getId() != 0) {
+ m.setStatus(Status.SENDING);
+ mailMessageDao.update(m, null);
+ }
+ taskExecutor.execute(new Runnable() {
+ public void run() {
+ log.debug("Message sending in
progress");
+ log.debug(" To: " + m.getRecipients());
+ log.debug(" Subject: " +
m.getSubject());
+
+ // -- Send the message --
+ try {
+
Transport.send(getMimeMessage(m));
+ m.setStatus(Status.DONE);
+ } catch (Exception e) {
+ log.error("Error while sending
message", e);
+ m.setStatus(Status.NONE);
+ }
+ if (m.getId() != 0) {
+ mailMessageDao.update(m, null);
+ }
+ }
+ });
+ } else {
+ m.setStatus(Status.NONE);
+ mailMessageDao.update(m, null);
+ }
+ }
+
+ public void resetSendingStatus() {
+ log.debug("resetSendingStatus enter ...");
+ Calendar c = Calendar.getInstance();
+ c.add(Calendar.MILLISECOND, -MAIL_SEND_TIMEOUT);
+ mailMessageDao.resetSendingStatus(c);
+ log.debug("... resetSendingStatus done.");
+ }
+
+ public void sendMails() {
+ log.debug("sendMails enter ...");
+ List<MailMessage> list = mailMessageDao.get(0, 1);
+ while (!list.isEmpty()) {
+ send(list.get(0), true);
+ list = mailMessageDao.get(0, 1);
}
+ log.debug("... sendMails done.");
}
}