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();