/* * Copyright 2011 Future Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.krakenapps.mail.impl; import javax.mail.MessagingException; import javax.mail.NoSuchProviderException; import org.krakenapps.api.Script; import org.krakenapps.api.ScriptArgument; import org.krakenapps.api.ScriptContext; import org.krakenapps.api.ScriptUsage; import org.krakenapps.mail.MailerConfig; import org.krakenapps.mail.MailerRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MailerScript implements Script { private final Logger logger = LoggerFactory.getLogger(MailerScript.class); private ScriptContext context; private MailerRegistry registry; public MailerScript(MailerRegistry registry) { this.registry = registry; } @Override public void setScriptContext(ScriptContext context) { this.context = context; } public void list(String[] args) { context.println("Configurations"); context.println("------------------"); for (MailerConfig config : registry.getConfigs()) context.println(config); } @ScriptUsage(description = "register smtp server configuration") public void register(String[] args) { MailerConfig config = new MailerConfig(); try { context.print("Name? "); config.setName(context.readLine()); context.print("SMTP Server? "); config.setHost(context.readLine()); context.print("SMTP Port? "); config.setPort(Integer.parseInt(context.readLine())); if (config.getPort() < 1 || config.getPort() > 65535) throw new NumberFormatException(); context.print("SMTP User? "); config.setUser(context.readLine()); context.print("SMTP Password? "); config.setPassword(context.readPassword()); config.setProtocol("smtp"); config.setAuth(true); if (config.getPort() == 587 || config.getPort() == 465) config.setTls(true); registry.register(config); context.println("new configuration added"); } catch (InterruptedException e) { context.println(""); context.println("interrupted"); } catch (NumberFormatException e) { context.println("invalid port number format"); } } @ScriptUsage(description = "remove smtp configuration", arguments = { @ScriptArgument(name = "name", type = "string", description = "smtp configuration name") }) public void unregister(String[] args) { try { registry.unregister(args[0]); context.println("smtp configuration removed"); } catch (Exception e) { context.println(e.getMessage()); logger.error("kraken-mail: cannot remove smtp configuration", e); } } @ScriptUsage(description = "send mail", arguments = { @ScriptArgument(name = "name", type = "string", description = "smtp configuration name") }) public void send(String[] args) throws NoSuchProviderException, MessagingException { try { context.print("From? "); String from = context.readLine(); context.print("To? "); String to = context.readLine(); context.print("Subject? "); String subject = context.readLine(); context.println("Enter message, end with \".\" on a line by itself."); StringBuilder sb = new StringBuilder(); while (true) { String line = context.readLine(); if (line.equals(".")) break; sb.append(line); sb.append("\n"); } context.println("sending..."); MailerConfig config = registry.getConfig(args[0]); registry.send(config, from, to, subject, sb.toString()); context.println("complete"); } catch (MessagingException e) { context.println("send failed. " + e); logger.error("kraken-mail: send failed", e); } catch (InterruptedException e) { context.println("interrupted"); } } }