package javacodebook.misc.mail_send;

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.Date;
import java.util.Properties;

/**
 * Diese Klasse dient zum Versenden einer einfachen Mail. Die Mail hat keine 
 * Attachments, und sie kann auch nicht an Personen im CC oder BCC versendet
 * werden.
 * @author  Mark Donnermeyer
 */
public class SimpleMailSender {
    
    // Die Daten, die zum Versand einer Mail benötigt werden.
    String recipient = null;
    String sender    = null;
    String subject   = null;
    String text      = null;
    String host      = null;
    
    public SimpleMailSender() {
    }
    
    public void setHost(String host) {
        this.host = host;
    }
    
    public void setRecipient(String recipient) {
        this.recipient = recipient;
    }
    
    public void setSender(String sender) {
        this.sender = sender;
    }
    
    public void setSubject(String subject) {
        this.subject = subject;
    }
    
    public void setText(String text) {
        this.text = text;
    }

    /**
     * Versendet die Nachricht. Treten dabei Probleme auf, werden diese in Form
     * einer Exception an die aufrufende Instanz weitergeleitet.
     */
    public void sendMessage() throws AddressException, MessagingException {
        
        // Der SMTP-Host, über den die Mails gesendet werden, wird in der Liste
        // der Properties angegeben.
        Properties props = new Properties();
        props.put("mail.smtp.host", host);

        // Es wird eine Mail-Session angelegt. Über diese Session erfolgt der
        // Versand.
        Session session = Session.getDefaultInstance(props, null);

        // Nachricht erzeugen, Adressat, Absender, Betreff und Text angeben.
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(sender));
        InternetAddress[] address = {new InternetAddress(recipient)};
        msg.setRecipients(Message.RecipientType.TO, address);
        msg.setSubject(subject);
        msg.setSentDate(new Date());
        msg.setText(text);

        // Die Nachricht versenden.
        Transport.send(msg);
    }
}