package org.subethamail.smtp.util;

import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;

/**
 * @author Jeff Schnitzer
 */
public class EmailUtils
{
	/**
	 * @return true if the string is a valid email address
	 */
	public static boolean isValidEmailAddress(String address)
	{
		// MAIL FROM: <>
		if (address.length() == 0)
			return true;

		boolean result = false;
		try
		{
			InternetAddress[] ia = InternetAddress.parse(address, true);
			if (ia.length == 0)
				result = false;
			else
				result = true;
		}
		catch (AddressException ae)
		{
			result = false;
		}
		return result;
	}

	/**
	 * Extracts the email address within a <> after a specified offset.
	 */
	public static String extractEmailAddress(String args, int offset)
	{
		String address = args.substring(offset).trim();
		if (address.indexOf('<') == 0)
		{
			address = address.substring(1, address.indexOf('>'));
			// spaces within the <> are also possible, Postfix apparently
			// trims these away:
			return address.trim();
		}

		// find space (e.g. SIZE argument)
		int nextarg = address.indexOf(" ");
		if (nextarg > -1)
		{
			address = address.substring(0, nextarg).trim();
		}
		return address;
	}

	/**
	 * Normalize the domain-part to lowercase.  If email address is missing
	 * an '@' the email is returned as-is.
	 */
	public static String normalizeEmail(String email)
	{
		int atIndex = email.indexOf('@');
		if (atIndex < 0)
			return email;
		else
			return email.substring(0, atIndex) + email.substring(atIndex).toLowerCase();
	}
}