自分のGmailアカウントにファイル保管(Javaソースコード)

ファイルの手軽なバックアップ手段として、cronで定期的に自分のGmailアカウント(Google AppsでもOK)へ飛ばすってのが便利です。送信メール容量の上限は(たぶん圧縮後サイズで)10MBです。
コマンドラインのメールクライアントにGmail用の設定すりゃいいんですが、方法調べるのも面倒なので、Javaで書いて(ていうか手元にあったモノを数行書き換えて)済ませちゃいました。使う人いるかもしれないので、置いときます。


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class GmailStorage {

    public static void main(String[] args) throws MessagingException, FileNotFoundException {
        final String _file = args[0];
        final String _contentType = args[1];
        
        String email = "myaccount@gmail.com";
        String passwd = "mypassword";

        Properties prop = new Properties();
        prop.put("mail.smtp.host", "smtp.gmail.com");
        prop.put("mail.smtp.port", "587");
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.starttls.enable", "true");

        Transport transport = null;

        try {
            Session sess = Session.getInstance(prop);
            MimeMessage mm = new MimeMessage(sess);
            mm.setFrom(new InternetAddress(email));
            mm.setSubject(_file);
            mm.setRecipient(Message.RecipientType.TO, new InternetAddress(email));
            MimeBodyPart mbp1 = new MimeBodyPart();
            mbp1.setText("File attached.", "ISO-2022-JP");
            MimeBodyPart mbp2 = new MimeBodyPart();
            mbp2.setDataHandler(new DataHandler(new DataSource() {
                public String getContentType() {
                    return _contentType;
                }
                public InputStream getInputStream() throws IOException {
                    return new FileInputStream(new java.io.File(_file));
                }
                public String getName() {
                    return _file;
                }
                public OutputStream getOutputStream() throws IOException {
                    throw new IOException();
                }
            }));
            mbp2.setFileName(_file);
            Multipart mp = new MimeMultipart();
            mp.addBodyPart(mbp1);
            mp.addBodyPart(mbp2);
            mm.setContent(mp);

            transport = sess.getTransport("smtp");
            transport.connect(email, passwd);
            transport.sendMessage(mm, mm.getAllRecipients());
        }
        finally {
            if (transport != null) {
                transport.close();
            }
        }
    }
}