package org.cloudgraph.web.model.common;
import java.util.Iterator;
import java.util.Properties;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.cloudgraph.web.model.ModelBean;
@ManagedBean(name="EmailBean")
@SessionScoped
public class EmailBean extends ModelBean {
private static final long serialVersionUID = 1L;
private static Log log =LogFactory.getLog(EmailBean.class);
private String subject;
private String message;
private String emailAddress;
// credentials for 1and1 cloudgraph.org
final String username = "scott-cinnamond@cloudgraph.org";
final String password = "p1hoenix";
private void clear() {
this.subject = null;
this.message = null;
this.emailAddress = null;
}
public String cancel() {
clear();
return null;
}
public String send() {
try {
Properties props = new Properties();
//gmail
//props.put("mail.smtp.auth", "true");
//props.put("mail.smtp.starttls.enable", "true");
//props.put("mail.smtp.host", "smtp.gmail.com");
//props.put("mail.smtp.port", "587");
// 1and1 IMAP over POP3
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.1and1.com");
props.put("mail.smtp.port", "587");
//props.put("mail.store.protocol", "pop3s");
//props.put("mail.pop3.host", "imap.1and1.com");
//props.put("mail.pop3.port", "143");
log.info("username: " + this.username);
Iterator iter = props.keySet().iterator();
while (iter.hasNext()) {
String key = (String)iter.next();
String value = (String)props.get(key);
log.info(key + ": " + value);
}
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(this.emailAddress));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(username));
message.setSubject(this.getSubject());
StringBuilder buf = new StringBuilder();
buf.append(this.getMessage());
buf.append("\n");
buf.append("FROM: ");
buf.append(this.emailAddress);
message.setText(buf.toString());
Transport.send(message);
log.info("sent mail: " + subject);
clear();
} catch (com.sun.mail.smtp.SMTPSendFailedException e) {
log.error(e.getMessage(), e);
if (e.getMessage() != null && e.getMessage().contains("Address syntax")) {
FacesMessage msg = new FacesMessage(e.getMessage());
FacesContext.getCurrentInstance().addMessage(null, msg);
}
else {
FacesMessage msg = new FacesMessage("Internal Error");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
} catch (MessagingException e) {
log.error(e.getMessage(), e);
FacesMessage msg = new FacesMessage("Internal Error");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
return null;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void validateSubject(FacesContext facesContext,
UIComponent component, Object value) {
if (value == null || ((String)value).trim().length() == 0) {
String msg = "Subject is a required field";
throw new ValidatorException(
new FacesMessage(msg, msg));
}
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void validateMessage(FacesContext facesContext,
UIComponent component, Object value) {
if (value == null || ((String)value).trim().length() == 0) {
String msg = "Message is a required field";
throw new ValidatorException(
new FacesMessage(msg, msg));
}
}
public String getEmailAddress() {
return emailAddress;
}
public void setEmailAddress(String emailAddress) {
this.emailAddress = emailAddress;
}
public void validateEmailAddress(FacesContext facesContext,
UIComponent component, Object value) {
if (value == null || ((String)value).trim().length() == 0) {
String msg = "Email Address is a required field";
throw new ValidatorException(
new FacesMessage(msg, msg));
}
if (!((String)value).contains("@")) {
String msg = "Invalid (From) Email Eddress";
throw new ValidatorException(
new FacesMessage(msg, msg));
}
}
}