edu.harvard.med.screensaver.io.Spammer.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.med.screensaver.io.Spammer.java

Source

// $HeadURL$
// $Id$
//
// Copyright  2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
// 
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.

package edu.harvard.med.screensaver.io;

import java.io.File;

import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;

import static edu.harvard.med.screensaver.service.EmailService.DELIMITER;
import edu.harvard.med.screensaver.service.SmtpEmailService;

public class Spammer {
    private static Logger log = Logger.getLogger(Spammer.class);

    public static final int SHORT_OPTION_INDEX = 0;
    public static final int LONG_OPTION_INDEX = 1;
    public static final int DESCRIPTION_INDEX = 2;
    public static final String[] MAIL_FROM_OPTION = { "mf", "mail-from",
            "from address for the mail, defaults to the username" };
    public static final String[] MAIL_CC_LIST_OPTION = { "cclist", "mail-cc-list",
            "the cc recipient(s) of the message, delimited by \"" + DELIMITER + "\"" };
    public static final String[] MAIL_REPLYTO_LIST_OPTION = { "replyTos", "mail-replyto-list",
            "the replyto address(es) of the message, delimited by \"" + DELIMITER + "\"" };
    public static final String[] MAIL_RECIPIENT_LIST_OPTION = { "recipientlist", "mail-recipient-list",
            "the recipient(s) of the message, delimited by \"" + DELIMITER + "\"" };
    public static final String[] MAIL_MESSAGE_OPTION = { "mm", "mail-message", "the mail message" };
    public static final String[] MAIL_FILE_ATTACHMENT = { "f", "mail-file-attachment", "file to attach" };
    public static final String[] MAIL_SUBJECT_OPTION = { "ms", "mail-subject", "the mail subject" };
    public static final String[] MAIL_SERVER_OPTION = { "mh", "mail-host", "the smtp mail server host" };
    public static final String[] MAIL_USERNAME_OPTION = { "mu", "mail-user", "the smtp mail user" };
    public static final String[] MAIL_USER_PASSWORD_OPTION = { "mp", "mail-password",
            "the smtp mail user password" };
    public static final String[] MAIL_USE_SMTPS = { "smtps", "use-smtps", "use SMTPS Auth (gmail)" };

    @SuppressWarnings("static-access")
    public static void main(String[] args) throws Exception {

        CommandLineApplication app = new CommandLineApplication(args);
        String[] option = MAIL_RECIPIENT_LIST_OPTION;
        app.addCommandLineOption(OptionBuilder.withType(Integer.class).hasArg().isRequired()
                .withArgName(option[SHORT_OPTION_INDEX]).withDescription(option[DESCRIPTION_INDEX])
                .withLongOpt(option[LONG_OPTION_INDEX]).create(option[SHORT_OPTION_INDEX]));

        option = MAIL_CC_LIST_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_REPLYTO_LIST_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_MESSAGE_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_FILE_ATTACHMENT;
        app.addCommandLineOption(OptionBuilder.hasArg().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_SUBJECT_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_SERVER_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_USERNAME_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_USER_PASSWORD_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_FROM_OPTION;
        app.addCommandLineOption(OptionBuilder.hasArg().withArgName(option[SHORT_OPTION_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));

        option = MAIL_USE_SMTPS;
        app.addCommandLineOption(
                OptionBuilder.withArgName(option[SHORT_OPTION_INDEX]).withDescription(option[DESCRIPTION_INDEX])
                        .withLongOpt(option[LONG_OPTION_INDEX]).create(option[SHORT_OPTION_INDEX]));

        app.processOptions(true, true);

        String message = app.getCommandLineOptionValue(MAIL_MESSAGE_OPTION[SHORT_OPTION_INDEX]);

        File attachedFile = null;
        if (app.isCommandLineFlagSet(MAIL_FILE_ATTACHMENT[SHORT_OPTION_INDEX])) {
            attachedFile = new File(app.getCommandLineOptionValue(MAIL_FILE_ATTACHMENT[SHORT_OPTION_INDEX]));
            if (!attachedFile.exists()) {
                log.error("Specified file does not exist: " + attachedFile.getCanonicalPath());
                System.exit(1);
            }
        }

        String subject = app.getCommandLineOptionValue(MAIL_SUBJECT_OPTION[SHORT_OPTION_INDEX]);
        String recipientlist = app.getCommandLineOptionValue(MAIL_RECIPIENT_LIST_OPTION[SHORT_OPTION_INDEX]);
        String[] recipients = recipientlist.split(DELIMITER);

        String[] ccrecipients = null;
        if (app.isCommandLineFlagSet(MAIL_CC_LIST_OPTION[SHORT_OPTION_INDEX])) {
            String cclist = app.getCommandLineOptionValue(MAIL_CC_LIST_OPTION[SHORT_OPTION_INDEX]);
            ccrecipients = cclist.split(DELIMITER);
        }

        String replytos = null;
        if (app.isCommandLineFlagSet(MAIL_REPLYTO_LIST_OPTION[SHORT_OPTION_INDEX])) {
            replytos = app.getCommandLineOptionValue(MAIL_CC_LIST_OPTION[SHORT_OPTION_INDEX]);
        }

        String mailHost = app.getCommandLineOptionValue(MAIL_SERVER_OPTION[SHORT_OPTION_INDEX]);
        String username = app.getCommandLineOptionValue(MAIL_USERNAME_OPTION[SHORT_OPTION_INDEX]);
        String password = app.getCommandLineOptionValue(MAIL_USER_PASSWORD_OPTION[SHORT_OPTION_INDEX]);
        boolean useSmtps = app.isCommandLineFlagSet(MAIL_USE_SMTPS[SHORT_OPTION_INDEX]);

        String mailFrom = username;
        if (app.isCommandLineFlagSet(MAIL_FROM_OPTION[SHORT_OPTION_INDEX])) {
            mailFrom = app.getCommandLineOptionValue(MAIL_FROM_OPTION[SHORT_OPTION_INDEX]);
        }

        SmtpEmailService service = new SmtpEmailService(mailHost, username, replytos, password, useSmtps);
        service.send(subject, message, mailFrom, recipients, ccrecipients, attachedFile);
    }

}