2012年1月10日火曜日

Java: メール送信プログラム

JavaMailを利用したメール送信プログラムです。いちおう添付ファイルを2つ添付できますが、ここの処理はあまり参考にしないほうがいいです。
import java.util.*;
import java.io.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class MailSender{
    //日本語の文字コード
    public static final String JAPANESE_CODE = "ISO-2022-JP";
    
    //通信情報
    private String to, from, host;
    private boolean debug;
    
    //題名、本文、添付ファイル
    private String subject, text;
    private File file1, file2;

    //Toと添付ファイル以外を初期化
    public MailSender()
    {
    }
    
    public void setTo(String to)
    {
        this.to = to;
    }
    
    public String getTo()
    {
        return to;
    }
    
    public void setFrom(String from)
    {
        this.from = from;
    }
    
    public String getFrom()
    {
        return from;
    }
    
    public void setHost(String host)
    {
        this.host = host;
    }
    
    public String getHost()
    {
        return host;
    }
    
    public void setDebug(boolean b)
    {
        this.debug = b;
    }
    
    public boolean getDebug()
    {
        return debug;
    }
    
    public void setSubject(String subject)
    {
        this.subject = subject;
    }
    
    public String getSubject()
    {
        return subject;
    }
    
    public void setText(String text)
    {
        this.text = text;
    }
    
    public String getText()
    {
        return text;
    }
    
    public void setFile1(File file1)
    {
        this.file1 = file1;
    }
    
    public File getFile1()
    {
        return file1;
    }

    public void setFile2(File file2)
    {
        this.file2 = file2;
    }

    public File getFile2()
    {
        return file2;
    }
    
    //メールを送信する
    //戻り値:正常に送信された場合は true、そうでない場合は false 
    public boolean send()
    {
        try
        {
            MimeMessage message = getMimeMessage();
            message.setContent( getMultipart() );
            Transport.send( message );
            return true;
        }
        catch(Exception e)
        {
            return false;
        }
    }
    
    public Properties getProperties()
    {
        Properties props = new Properties();
        props.put("mail.smtp.host", host);
        props.put("mail.host", host);
        props.put("mail.from", from);
        
        if(debug) props.put("mail.debug", debug);
        
        return props;
    }
    
    public Session getSession()
    {
        Properties props = getProperties();
        Session session = Session.getInstance(props);
        session.setDebug(debug);
        return session;
    }
    
    public MimeMessage getMimeMessage() throws Exception
    {
        MimeMessage message = new MimeMessage( getSession() );
        
        message.setFrom(new InternetAddress(from));
        InternetAddress[] address = InternetAddress.parse(to);
        message.setRecipients(Message.RecipientType.TO, address);
        message.setSubject(subject, JAPANESE_CODE);
        message.setSentDate(new Date());
        
        return message;
    }

    public Multipart getMultipart() throws Exception
    {
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(getTextPart());
        mp.addBodyPart(getFilePart1());
        mp.addBodyPart(getFilePart2());
        return mp;
    }

    public MimeBodyPart getTextPart() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();
        part.setText(text, JAPANESE_CODE);
        return part;
    }

    public MimeBodyPart getFilePart1() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();

        FileDataSource fds = new FileDataSource( file1.getPath() );
        part.setDataHandler(new DataHandler( fds ));
        part.setFileName(MimeUtility.encodeWord( fds.getName() ));

        return part;
    }

    public MimeBodyPart getFilePart2() throws Exception
    {
        MimeBodyPart part = new MimeBodyPart();

        FileDataSource fds = new FileDataSource( file2.getPath() );
        part.setDataHandler(new DataHandler( fds ));
        part.setFileName(MimeUtility.encodeWord( fds.getName() ));

        return part;
    }
}
    
上記クラスの利用例です。
    public  void test(){
        MailSender ms = new MailSender();
       //下記に適切なデータを記述
        ms.setFrom("");
        ms.setTo("");
        ms.setDebug(false);
        ms.setHost("");
        ms.setSubject("");
        ms.setText("");
        //添付ファイルがある場合(任意)
        ms.setFile1( new File("") );
        ms.setFile2( new File("") );
        //メール送信
        ms.send();
    }


0 件のコメント:

コメントを投稿