2008. 8. 12. 15:28

sun.net.smtp.SmtpClient을 이용한 메일 보내기

package jp.co.ntl.application.printauth;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintStream;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import sun.net.smtp.SmtpClient;

public class FreeSendMailer extends JFrame
        implements ActionListener {

    private static final long serialVersionUID = 1L;
    private JTextArea message;
    private JTextField server;
    private JTextField to;
    private JTextField from;
    private JTextField title;
    private JButton btn;

    private String serverName = "localhost";
    private String fromName = "from@xxx.xx";
    private String toName = "to@xxx.xx.xx";
    
    public FreeSendMailer() {
        this.setSize(300, 400);
        this.setResizable(false);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel p = new JPanel();
        p.setLayout(new GridLayout(4, 1));
        server = new JTextField(serverName);
        from = new JTextField(fromName);
        to = new JTextField(toName);
        title = new JTextField("Mail Title");
        
        JPanel p1 = new JPanel();
        JLabel l1 = new JLabel("SERVER:");
        l1.setPreferredSize(new Dimension(80,20));
        p1.add(l1);
        p1.add(server);
        
        JPanel p2 = new JPanel();
        JLabel l2 = new JLabel("FROM:");
        l2.setPreferredSize(new Dimension(80,20));
        p2.add(l2);
        p2.add(from);
        
        JPanel p3 = new JPanel();
        JLabel l3 = new JLabel("TO:");
        l3.setPreferredSize(new Dimension(80,20));
        p3.add(l3);
        p3.add(to);

        JPanel p4 = new JPanel();
        JLabel l4 = new JLabel("TITLE:");
        l4.setPreferredSize(new Dimension(80,20));
        p4.add(l4);
        p4.add(title);

        server.setPreferredSize(new Dimension(200,20));
        from.setPreferredSize(new Dimension(200,20));
        to.setPreferredSize(new Dimension(200,20));
        title.setPreferredSize(new Dimension(200,20));

        p.add(p1);
        p.add(p2);
        p.add(p3);
        p.add(p4);

        this.getContentPane().setLayout(new BorderLayout());
        this.getContentPane().add(p, BorderLayout.NORTH);
        message = new JTextArea();
        message.setLineWrap(true);
        JScrollPane scroll = new JScrollPane();
        scroll.setVerticalScrollBarPolicy
                (JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scroll.getViewport().add(message);
        getContentPane().add(scroll, BorderLayout.CENTER);
        btn = new JButton("send");
        btn.addActionListener(this);
        getContentPane().add(btn, BorderLayout.SOUTH);
    }
    
    public static void main(String[] args) {
        new FreeSendMailer().setVisible(true);

    }
    
    public void actionPerformed(ActionEvent ev) {
        String to1 = to.getText();
        String from1 = from.getText();
        String server1 = server.getText();
        String title1 = title.getText();
        String msg = message.getText();
        try {
            title1 = new String(title1.getBytes("ISO2022JP"));
            msg = new String(msg.getBytes("ISO2022JP"));

            SmtpClient client = new SmtpClient(server1);
            client.from(from1);
            client.to(to1);
            PrintStream stream = client.startMessage();
            stream.println("To:" + to1);
            stream.println("Subject:" + title1);
            stream.println("Content-Type: text/plain; charset=iso-2022jp");
            stream.println(msg);
            stream.flush();
            stream.close();
            JOptionPane.showMessageDialog(this, "success!");
        } catch(Exception ex) {
            ex.printStackTrace();
            JOptionPane.showMessageDialog(this, "failed\n"
                    + ex.toString());
        }
    }

}