From: Mathieu Baudier Date: Tue, 22 Dec 2009 19:22:55 +0000 (+0000) Subject: Add mail support X-Git-Tag: argeo-slc-2.1.7~1508 X-Git-Url: http://git.argeo.org/?a=commitdiff_plain;ds=sidebyside;h=20d41f48ae47404672f032cd44acf126636fd67b;p=gpl%2Fargeo-slc.git Add mail support git-svn-id: https://svn.argeo.org/slc/trunk@3190 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/runtime/org.argeo.slc.support.simple/pom.xml b/runtime/org.argeo.slc.support.simple/pom.xml index 1bc5b8905..dde964eaf 100644 --- a/runtime/org.argeo.slc.support.simple/pom.xml +++ b/runtime/org.argeo.slc.support.simple/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.slc @@ -68,6 +69,7 @@ com.springsource.com.jcraft.jsch + com.opensymphony.quartz com.springsource.org.quartz @@ -77,6 +79,14 @@ org.springframework org.springframework.context.support + + + + javax.mail + com.springsource.javax.mail + + + org.springframework org.springframework.transaction diff --git a/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/mail/SendMail.java b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/mail/SendMail.java new file mode 100644 index 000000000..04e1b503f --- /dev/null +++ b/runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/mail/SendMail.java @@ -0,0 +1,128 @@ +package org.argeo.slc.mail; + +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +import javax.mail.Message; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; + +import org.argeo.slc.SlcException; +import org.argeo.slc.core.execution.tasks.SystemCall; + +// http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailUsage +// http://java.sun.com/products/javamail/FAQ.html#gmail +public class SendMail implements Runnable { + private String host; + private String from; + private String to; + private String subject; + private String text; + private String username; + private String password; + private Map javaMailProperties = new HashMap(); + + public void run() { + if ("local".equals(host)) + sendWithMailCommand(); + else if ("smtp.gmail.com".equals(host)) + sendWithGMail(); + else + sendWithJavaMail(); + } + + protected void sendWithMailCommand() { + SystemCall mail = new SystemCall("mail"); + mail.arg("-s", subject).arg(to); + mail.run(); + } + + protected void sendWithJavaMail() { + try { + // Get system properties + Properties props = System.getProperties(); + + // Setup mail server + props.put("mail.smtp.host", host); + + for (String key : javaMailProperties.keySet()) + props.put(key, javaMailProperties.get(key)); + + // Get session + Session session = Session.getDefaultInstance(props, null); + + // Define message + MimeMessage message = new MimeMessage(session); + buildJavaMailMessage(message); + + // Send message + Transport.send(message); + } catch (Exception e) { + throw new SlcException("Cannot send message.", e); + } + } + + protected void sendWithGMail() { + try { + Properties props = new Properties(); + props.put("mail.smtps.auth", "true"); + props.put("mail.smtps.host", host); + Session session = Session.getDefaultInstance(props, null); + MimeMessage message = new MimeMessage(session); + buildJavaMailMessage(message); + Transport t = session.getTransport("smtps"); + try { + t.connect(host, username, password); + t.sendMessage(message, message.getAllRecipients()); + } finally { + t.close(); + } + + } catch (Exception e) { + throw new SlcException("Cannot send message.", e); + } + } + + protected void buildJavaMailMessage(Message message) throws Exception { + message.setFrom(new InternetAddress(from)); + message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); + message.setSubject(subject); + message.setText(text); + } + + public void setHost(String host) { + this.host = host; + } + + public void setFrom(String from) { + this.from = from; + } + + public void setTo(String to) { + this.to = to; + } + + public void setSubject(String subject) { + this.subject = subject; + } + + public void setText(String text) { + this.text = text; + } + + public void setJavaMailProperties(Map javaMailProperties) { + this.javaMailProperties = javaMailProperties; + } + + public void setUsername(String username) { + this.username = username; + } + + public void setPassword(String password) { + this.password = password; + } + +}