From cb285cbfddfc0b633d6b8cdb4dc0d2bd2b8b51ef Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Thu, 05 Jan 2012 17:34:05 -0500
Subject: [PATCH] Fixed bug in receive hook for repositories in subfolders

---
 src/com/gitblit/MailExecutor.java |   43 +++++++++++++++++++++++++++++++++++++------
 1 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/src/com/gitblit/MailExecutor.java b/src/com/gitblit/MailExecutor.java
index 202875e..77dc80b 100644
--- a/src/com/gitblit/MailExecutor.java
+++ b/src/com/gitblit/MailExecutor.java
@@ -15,6 +15,7 @@
  */
 package com.gitblit;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
@@ -24,6 +25,7 @@
 import java.util.Queue;
 import java.util.Set;
 import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.regex.Pattern;
 
 import javax.mail.Authenticator;
 import javax.mail.Message;
@@ -145,15 +147,35 @@
 	public Message createMessage(List<String> toAddresses) {
 		MimeMessage message = new MimeMessage(session);
 		try {
-			InternetAddress from = new InternetAddress(settings.getString(Keys.mail.fromAddress,
-					"gitblit@gitblit.com"), "Gitblit");
+			String fromAddress = settings.getString(Keys.mail.fromAddress, null);
+			if (StringUtils.isEmpty(fromAddress)) {
+				fromAddress = "gitblit@gitblit.com";
+			}
+			InternetAddress from = new InternetAddress(fromAddress, "Gitblit");
 			message.setFrom(from);
 
-			InternetAddress[] tos = new InternetAddress[toAddresses.size()];
-			for (int i = 0; i < toAddresses.size(); i++) {
-				tos[i] = new InternetAddress(toAddresses.get(i));
+			// determine unique set of addresses
+			Set<String> uniques = new HashSet<String>();
+			for (String address : toAddresses) {
+				uniques.add(address.toLowerCase());
 			}
-			message.setRecipients(Message.RecipientType.TO, tos);
+			
+			Pattern validEmail = Pattern
+					.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
+			List<InternetAddress> tos = new ArrayList<InternetAddress>();
+			for (String address : uniques) {
+				if (StringUtils.isEmpty(address)) {
+					continue;
+				}
+				if (validEmail.matcher(address).find()) {
+					try {
+						tos.add(new InternetAddress(address));
+					} catch (Throwable t) {
+					}
+				}
+			}			
+			message.setRecipients(Message.RecipientType.BCC,
+					tos.toArray(new InternetAddress[tos.size()]));
 			message.setSentDate(new Date());
 		} catch (Exception e) {
 			logger.error("Failed to properly create message", e);
@@ -162,6 +184,15 @@
 	}
 
 	/**
+	 * Returns the status of the mail queue.
+	 * 
+	 * @return true, if the queue is empty
+	 */
+	public boolean hasEmptyQueue() {
+		return queue.isEmpty();
+	}
+
+	/**
 	 * Queue's an email message to be sent.
 	 * 
 	 * @param message

--
Gitblit v1.9.1