// Path: happycoding/src/main/java/happy/coding/io/Logs.java
// public class Logs {
// 	private final static Logger logger = LoggerFactory.getLogger(Logs.class);
// 	private static String conf = null;
// 
// 	// default configuration
// 	static {
// 		if ((conf = FileIO.getResource("log4j.properties")) != null)
// 			config(conf, false);
// 		else if ((conf = FileIO.getResource("log4j.xml")) != null)
// 			config(conf, true);
// 	}
// 
// 	public static Logger config(String config, boolean isXml) {
// 		if (isXml)
// 			DOMConfigurator.configure(config);
// 		else
// 			PropertyConfigurator.configure(config);
// 
// 		return logger;
// 	}
// 
// 	public static void debug(double data) {
// 		logger.debug(Strings.toString(data));
// 	}
// 
// 	public static void debug(Object msg) {
// 		logger.debug(msg.toString());
// 	}
// 
// 	public static void debug(String msg) {
// 		logger.debug(msg);
// 	}
// 
// 	public static void debug(String format, Object arg) {
// 		logger.debug(format, arg);
// 	}
// 
// 	public static void debug(String format, Object... args) {
// 		logger.debug(format, args);
// 	}
// 
// 	public static void debug() {
// 		debug("");
// 	}
// 
// 	public static void error() {
// 		error("");
// 	}
// 
// 	public static void warn() {
// 		warn("");
// 	}
// 
// 	public static void info() {
// 		info("");
// 	}
// 
// 	public static void info(double data) {
// 		logger.info(Strings.toString(data));
// 	}
// 
// 	public static void info(Object msg) {
// 		if (msg == null)
// 			logger.info("");
// 		else
// 			logger.info(msg.toString());
// 	}
// 
// 	public static void info(String format, Object arg) {
// 		logger.info(format, arg);
// 	}
// 
// 	public static void info(String format, Object... args) {
// 		logger.info(format, args);
// 	}
// 
// 	public static void error(double data) {
// 		logger.error(Strings.toString(data));
// 	}
// 
// 	public static void error(Object msg) {
// 		logger.error(msg.toString());
// 	}
// 
// 	public static void warn(String msg) {
// 		logger.warn(msg);
// 	}
// 
// 	public static void warn(String format, Object arg) {
// 		logger.warn(format, arg);
// 	}
// 
// 	public static void warn(String format, Object... args) {
// 		logger.warn(format, args);
// 	}
// 
// 	public static void warn(double data) {
// 		logger.warn(Strings.toString(data));
// 	}
// 
// 	public static void warn(Object msg) {
// 		logger.warn(msg.toString());
// 	}
// 
// 	public static void error(String msg) {
// 		logger.error(msg);
// 	}
// 
// 	public static void error(String format, Object arg) {
// 		logger.error(format, arg);
// 	}
// 
// 	public static void error(String format, Object... args) {
// 		logger.error(format, args);
// 	}
// 
// 	public static void off() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.OFF);
// 	}
// 
// 	public static void on() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
// 	}
// 
// 	@Test
// 	public void example() {
// 		String[] msgs = new String[] { "Section content: ", "@author guoguibing" };
// 
// 		debug(msgs);
// 	}
// 
// }


import happy.coding.io.Logs;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

		msg.setFrom(new InternetAddress(from));
		msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
		if (cc != null)
			msg.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
		if (bcc != null)
			msg.setRecipient(Message.RecipientType.BCC, new InternetAddress(bcc));

		msg.setSubject(subject);
		msg.setSentDate(new Date());

		if (attachment != null) {
			MimeBodyPart tp = new MimeBodyPart();
			tp.setText(text);

			MimeBodyPart ap = new MimeBodyPart();
			FileDataSource fds = new FileDataSource(attachment);
			ap.setDataHandler(new DataHandler(fds));
			ap.setFileName(fds.getName());

			Multipart mp = new MimeMultipart();
			mp.addBodyPart(tp);
			mp.addBodyPart(ap);

			msg.setContent(mp);
		} else {
			msg.setText(text);
		}

		Transport.send(msg);


// Path: happycoding/src/main/java/happy/coding/io/Logs.java
// public class Logs {
// 	private final static Logger logger = LoggerFactory.getLogger(Logs.class);
// 	private static String conf = null;
// 
// 	// default configuration
// 	static {
// 		if ((conf = FileIO.getResource("log4j.properties")) != null)
// 			config(conf, false);
// 		else if ((conf = FileIO.getResource("log4j.xml")) != null)
// 			config(conf, true);
// 	}
// 
// 	public static Logger config(String config, boolean isXml) {
// 		if (isXml)
// 			DOMConfigurator.configure(config);
// 		else
// 			PropertyConfigurator.configure(config);
// 
// 		return logger;
// 	}
// 
// 	public static void debug(double data) {
// 		logger.debug(Strings.toString(data));
// 	}
// 
// 	public static void debug(Object msg) {
// 		logger.debug(msg.toString());
// 	}
// 
// 	public static void debug(String msg) {
// 		logger.debug(msg);
// 	}
// 
// 	public static void debug(String format, Object arg) {
// 		logger.debug(format, arg);
// 	}
// 
// 	public static void debug(String format, Object... args) {
// 		logger.debug(format, args);
// 	}
// 
// 	public static void debug() {
// 		debug("");
// 	}
// 
// 	public static void error() {
// 		error("");
// 	}
// 
// 	public static void warn() {
// 		warn("");
// 	}
// 
// 	public static void info() {
// 		info("");
// 	}
// 
// 	public static void info(double data) {
// 		logger.info(Strings.toString(data));
// 	}
// 
// 	public static void info(Object msg) {
// 		if (msg == null)
// 			logger.info("");
// 		else
// 			logger.info(msg.toString());
// 	}
// 
// 	public static void info(String format, Object arg) {
// 		logger.info(format, arg);
// 	}
// 
// 	public static void info(String format, Object... args) {
// 		logger.info(format, args);
// 	}
// 
// 	public static void error(double data) {
// 		logger.error(Strings.toString(data));
// 	}
// 
// 	public static void error(Object msg) {
// 		logger.error(msg.toString());
// 	}
// 
// 	public static void warn(String msg) {
// 		logger.warn(msg);
// 	}
// 
// 	public static void warn(String format, Object arg) {
// 		logger.warn(format, arg);
// 	}
// 
// 	public static void warn(String format, Object... args) {
// 		logger.warn(format, args);
// 	}
// 
// 	public static void warn(double data) {
// 		logger.warn(Strings.toString(data));
// 	}
// 
// 	public static void warn(Object msg) {
// 		logger.warn(msg.toString());
// 	}
// 
// 	public static void error(String msg) {
// 		logger.error(msg);
// 	}
// 
// 	public static void error(String format, Object arg) {
// 		logger.error(format, arg);
// 	}
// 
// 	public static void error(String format, Object... args) {
// 		logger.error(format, args);
// 	}
// 
// 	public static void off() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.OFF);
// 	}
// 
// 	public static void on() {
// 		org.apache.log4j.Logger.getRootLogger().setLevel(Level.DEBUG);
// 	}
// 
// 	@Test
// 	public void example() {
// 		String[] msgs = new String[] { "Section content: ", "@author guoguibing" };
// 
// 		debug(msgs);
// 	}
// 
// }


// Path: happycoding/src/main/java/happy/coding/io/net/EMailer.java
import happy.coding.io.Logs;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

		msg.setFrom(new InternetAddress(from));
		msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
		if (cc != null)
			msg.setRecipient(Message.RecipientType.CC, new InternetAddress(cc));
		if (bcc != null)
			msg.setRecipient(Message.RecipientType.BCC, new InternetAddress(bcc));

		msg.setSubject(subject);
		msg.setSentDate(new Date());

		if (attachment != null) {
			MimeBodyPart tp = new MimeBodyPart();
			tp.setText(text);

			MimeBodyPart ap = new MimeBodyPart();
			FileDataSource fds = new FileDataSource(attachment);
			ap.setDataHandler(new DataHandler(fds));
			ap.setFileName(fds.getName());

			Multipart mp = new MimeMultipart();
			mp.addBodyPart(tp);
			mp.addBodyPart(ap);

			msg.setContent(mp);
		} else {
			msg.setText(text);
		}

		Transport.send(msg);


		Logs.debug("Have sent an email notification to {}. ", to);
