Fixed UTF-8 encoding in email notifications (issue 218)
diff --git a/releases.moxie b/releases.moxie
index dfad650..b34ea3b 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -16,6 +16,7 @@
 	 - Do not queue emails with no recipients (issue 201)

 	 - Disable view and blame links for deleted blobs (issue 216)

 	 - Fixed 1.2.x regression with individually symlinked repositories (issue 217)

+	 - Fixed UTF-8 encoding errors in email notifications (issue 218)

 	 - Fixed NPE in 1.2.1 Federation Client (issue 219)

 	 - Fixed extracting Groovy scripts on Express installs (issue 220)

 	 - Ensure Redmine url is properly formatted (issue 223)

@@ -53,6 +54,9 @@
 	- Yukihiko Sawanobori

     - github/akquinet

     - github/dapengme

+	

+	dependencyChanges:

+	- JGit 2.3.1.201302201838-r

 }

 

 #

diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 65dc559..83769d3 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -54,6 +54,8 @@
 

 import javax.mail.Message;

 import javax.mail.MessagingException;

+import javax.mail.internet.MimeBodyPart;

+import javax.mail.internet.MimeMultipart;

 import javax.servlet.ServletContext;

 import javax.servlet.ServletContextEvent;

 import javax.servlet.ServletContextListener;

@@ -2580,17 +2582,8 @@
 		}

 

 		// send an email, if possible

-		try {

-			Message message = mailExecutor.createMessageForAdministrators();

-			if (message != null) {

-				message.setSubject("Federation proposal from " + proposal.url);

-				message.setText("Please review the proposal @ " + gitblitUrl + "/proposal/"

-						+ proposal.token);

-				mailExecutor.queue(message);

-			}

-		} catch (Throwable t) {

-			logger.error("Failed to notify administrators of proposal", t);

-		}

+		sendMailToAdministrators("Federation proposal from " + proposal.url,

+				"Please review the proposal @ " + gitblitUrl + "/proposal/" + proposal.token);

 		return true;

 	}

 

@@ -2877,16 +2870,8 @@
 	 * @param message

 	 */

 	public void sendMailToAdministrators(String subject, String message) {

-		try {

-			Message mail = mailExecutor.createMessageForAdministrators();

-			if (mail != null) {

-				mail.setSubject(subject);

-				mail.setText(message);

-				mailExecutor.queue(mail);

-			}

-		} catch (MessagingException e) {

-			logger.error("Messaging error", e);

-		}

+		List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);

+		sendMail(subject, message, toAddresses);

 	}

 

 	/**

@@ -2916,7 +2901,16 @@
 			Message mail = mailExecutor.createMessage(toAddresses);

 			if (mail != null) {

 				mail.setSubject(subject);

-				mail.setText(message);

+				

+				MimeBodyPart messagePart = new MimeBodyPart();				

+				messagePart.setText(message, "utf-8");

+				messagePart.setHeader("Content-Type", "text/plain; charset=\"utf-8\"");

+				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");

+				

+				MimeMultipart multiPart = new MimeMultipart();

+				multiPart.addBodyPart(messagePart);

+				mail.setContent(multiPart);

+				

 				mailExecutor.queue(mail);

 			}

 		} catch (MessagingException e) {

@@ -2951,7 +2945,16 @@
 			Message mail = mailExecutor.createMessage(toAddresses);

 			if (mail != null) {

 				mail.setSubject(subject);

-				mail.setContent(message, "text/html");

+				

+				MimeBodyPart messagePart = new MimeBodyPart();				

+				messagePart.setText(message, "utf-8");

+				messagePart.setHeader("Content-Type", "text/html; charset=\"utf-8\"");

+				messagePart.setHeader("Content-Transfer-Encoding", "quoted-printable");

+				

+				MimeMultipart multiPart = new MimeMultipart();

+				multiPart.addBodyPart(messagePart);

+				mail.setContent(multiPart);

+

 				mailExecutor.queue(mail);

 			}

 		} catch (MessagingException e) {

diff --git a/src/main/java/com/gitblit/MailExecutor.java b/src/main/java/com/gitblit/MailExecutor.java
index 9001e83..54ff8b8 100644
--- a/src/main/java/com/gitblit/MailExecutor.java
+++ b/src/main/java/com/gitblit/MailExecutor.java
@@ -110,19 +110,6 @@
 		return session != null;

 	}

 

-	/**

-	 * Creates a message for the administrators.

-	 * 

-	 * @returna message

-	 */

-	public Message createMessageForAdministrators() {

-		List<String> toAddresses = settings.getStrings(Keys.mail.adminAddresses);

-		if (toAddresses.size() == 0) {

-			logger.warn("Can not notify administrators because no email addresses are defined!");

-			return null;

-		}

-		return createMessage(toAddresses);

-	}

 

 	/**

 	 * Create a message.

diff --git a/src/test/java/com/gitblit/tests/MailTest.java b/src/test/java/com/gitblit/tests/MailTest.java
index 05d55a2..4feedb0 100644
--- a/src/test/java/com/gitblit/tests/MailTest.java
+++ b/src/test/java/com/gitblit/tests/MailTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;

 

 import com.gitblit.FileSettings;

+import com.gitblit.Keys;

 import com.gitblit.MailExecutor;

 

 public class MailTest {

@@ -30,9 +31,9 @@
 	public void testSendMail() throws Exception {

 		FileSettings settings = new FileSettings("mailtest.properties");

 		MailExecutor mail = new MailExecutor(settings);

-		Message message = mail.createMessageForAdministrators();

+		Message message = mail.createMessage(settings.getStrings(Keys.mail.adminAddresses));

 		message.setSubject("Test");

-		message.setText("this is a test");

+		message.setText("Lägger till andra stycket i ny fil. UTF-8 encoded");

 		mail.queue(message);

 		mail.run();