Index: lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java =================================================================== diff -u -rf5ed6564197c3654246979aa07d57d754e1b6fb7 -r7e31f6d25dc9f5c22780eb6b3c25ec19fca00e1d --- lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java (.../DeliveryMethodMail.java) (revision f5ed6564197c3654246979aa07d57d754e1b6fb7) +++ lams_common/src/java/org/lamsfoundation/lams/events/DeliveryMethodMail.java (.../DeliveryMethodMail.java) (revision 7e31f6d25dc9f5c22780eb6b3c25ec19fca00e1d) @@ -2,6 +2,10 @@ import java.io.UnsupportedEncodingException; import java.security.InvalidParameterException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; import javax.mail.MessagingException; import javax.mail.internet.AddressException; @@ -24,9 +28,12 @@ public class DeliveryMethodMail extends AbstractDeliveryMethod { private static final Logger log = Logger.getLogger(DeliveryMethodMail.class); - private static DeliveryMethodMail instance; - private static final EmailValidator emailValidator = EmailValidator.getInstance(); + private static final long ERROR_SILENCE_TIMEOUT = 5000; + private static DeliveryMethodMail instance = null; + private final EmailValidator emailValidator = EmailValidator.getInstance(); + private final Map errors = new HashMap(); + private IUserManagementService userManagementService = null; public static DeliveryMethodMail getInstance() { @@ -49,7 +56,7 @@ return "Target user with ID " + toUserId + " was not found."; } String toEmail = toUser.getEmail(); - if (!DeliveryMethodMail.emailValidator.isValid(toEmail)) { + if (!emailValidator.isValid(toEmail)) { return "Target user's e-mail address is invalid."; } @@ -61,16 +68,17 @@ return "Source user with ID " + fromUserId + " was not found."; } String fromEmail = fromUser.getEmail(); - if (!DeliveryMethodMail.emailValidator.isValid(fromEmail)) { + if (!emailValidator.isValid(fromEmail)) { return "Source user's e-mail address is invalid."; } Emailer.send(subject, toEmail, "", fromEmail, "", message, isHtmlFormat); } return null; } catch (Exception e) { - DeliveryMethodMail.log.error("Error while sending an email: " + e.toString()); - return e.toString(); + String error = e.toString(); + logError(error); + return error; } } @@ -104,4 +112,29 @@ Emailer.sendFromSupportEmail(subject, adminEmail, body, isHtmlFormat); } } + + /** + * Checks if the error was already logged recently. If not, logs it. + */ + private synchronized void logError(String error) { + Iterator> errorIterator = errors.entrySet().iterator(); + boolean logError = true; + long currentTime = System.currentTimeMillis(); + // same errors younger than this will be silenced + long silencePeriod = currentTime - DeliveryMethodMail.ERROR_SILENCE_TIMEOUT; + while (errorIterator.hasNext()) { + Entry entry = errorIterator.next(); + if (entry.getKey() < silencePeriod) { + // clear the map from garbage + errorIterator.remove(); + } else if (error.equals(entry.getValue())) { + logError = false; + // do not break, let the clean up go through the whole map + } + } + if (logError) { + errors.put(currentTime, error); + DeliveryMethodMail.log.error("Error while sending emails: " + error); + } + } } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java =================================================================== diff -u -r0286278ded7ceca679228c62ca8d501bb57b515e -r7e31f6d25dc9f5c22780eb6b3c25ec19fca00e1d --- lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java (.../EventNotificationService.java) (revision 0286278ded7ceca679228c62ca8d501bb57b515e) +++ lams_common/src/java/org/lamsfoundation/lams/events/EventNotificationService.java (.../EventNotificationService.java) (revision 7e31f6d25dc9f5c22780eb6b3c25ec19fca00e1d) @@ -202,7 +202,6 @@ for (Integer id : toUserIds) { String result = deliveryMethod.send(fromUserId, id, subject, message, isHtmlFormat); if (result != null) { - EventNotificationService.log.warn("Error occured while sending message: " + result); event = new Event(IEventNotificationService.SINGLE_MESSAGE_SCOPE, String.valueOf(System.currentTimeMillis()), null, subject, message, isHtmlFormat); subscribe(event, id, deliveryMethod, null);