JavaでGmail。


    public static void main(String[] args) 
    {
        MailSender oMail = new MailSender( "smtp.sample.com", 25 );
        //Gmail送信
        //MailSender oMail = new MailSender( "smtp.gmail.com", 465, "xxxxx@gmail.com","xxxxxxx" );

        oMail.addToAddress( "xx1@local.jp","送信先" );
        oMail.addToAddress( "xx2@local.jp" );
        oMail.addCCAddress( "xx3@local.jp" );
        oMail.addBCCAddress( "xx4@local.jp","BCC" );
        oMail.setFromAddress( "xx@com","送信元" );
        oMail.setSubject("件名テスト" );
        oMail.setBody( "本文テスト" );
        oMail.addAttachment( "filepath" );


        try
        {
            oMail.sendMail();
        }
        catch( Exception e )
        {
            System.out.println( e.toString() );
            e.printStackTrace();
        }

        System.exit(0);
    }

ライブラリにして押し込んでますが、肝はインスタンス生成時の第3引数(ID)/第4引数(パスワード)の有無。 これをトリガーにgetInitSession()関数内で認証設定を行います。

引数無しのインスタンス生成はsmtpはlocalhost、ポートは25がデフォルトです。

mail.jarをダウンロードして下記ソースで使ってください。


import java.io.*;
import java.util.*;

import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailSender 
{

    /**
     * メール送信エラー
     *
     */
    public class SenderException extends Exception 
    {
        public SenderException( Exception e ) 
        {
            super( e );
        }
        private static final long serialVersionUID = 1L;        
    };

    /** エンコード 定義*/
    private final String Encode_ISO2022 = "ISO-2022-JP";

    /** エンコード 定義*/
    private final String Encode_UTF8 = "UTF-8";

    /** SSL */
    private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

    /** 送信者/別名リスト */
    private Hashtable listTo = new Hashtable();
    /** CC/別名リスト */
    private Hashtable listCC = new Hashtable();
    /** BCC/別名リスト */
    private Hashtable listBCC = new Hashtable();
    /** 送信者/別名 */
    private Hashtable pearFrom = new Hashtable(1);

    /** 添付ファイル */
    private List listFilePath = new ArrayList();

    /** エンコード */
    private String _AttachmentFileNameEncode = Encode_ISO2022;

    /** エンコード */
    private String _AddressAliasEncode = Encode_ISO2022; 

    /** エンコード */
    private String _SubjectEncode = Encode_ISO2022;

    /** エンコード */
    private String _TextEncode = Encode_ISO2022;

    /** 件名 */
    private String _Subject = "Subject";

    /** 本文 */
    private String _Body = "Body";

    /** SMTPサーバ */
    private String _SMTP = "localhost";

    /** ポート */
    private int _Port = 25;

    /** デバッグ */
    private boolean _Dubug = false;

    /** 認証 */
    private boolean _Auth = false;

    /** 認証ID */
    private String _AuthUserName = "";

    /** 認証パスワード */
    private String _AuthPassWord = "";


    /**
     * 発信者格納
     * @param sFrom 発信者アドレス
     */
    public void setFromAddress( String sFrom )
    {
        pearFrom.clear();
        pearFrom.put( sFrom, "" );
    }

    /**
     * 発信者格納
     * @param sFrom 送信者アドレス
     * @param sAlias 送信者別名
     */
    public void setFromAddress( String sFrom, String sAlias )
    {
        pearFrom.clear();
        pearFrom.put( sFrom, sAlias );
    }

    /**
     * 送信者を格納する
     * @param sTo 送信者アドレス
     * @throws AddressException
     */
    public void addToAddress( String sTo )
    {
        listTo.put( sTo, "" );
    }

    /**
     * 送信者を格納する
     * @param sTo 送信者アドレス
     * @param sAlias 送信者別名
     * @throws AddressException
     */
    public void addToAddress( String sTo, String sAlias )
    {
        listTo.put( sTo, sAlias );
    }

    /**
     * CCを格納する
     * @param sCC CCアドレス
     * @throws AddressException
     */
    public void addCCAddress( String sCC )
    {
        listCC.put( sCC, "" );
    }

    /**
     * CCを格納する
     * @param sCC CCアドレス
     * @param sAlias CC別名
     * @throws AddressException
     */
    public void addCCAddress( String sCC, String sAlias )
    {
        listCC.put( sCC, sAlias );
    }

    /**
     * BCCを格納する
     * @param sBCC BCCアドレス
     * @throws AddressException
     */
    public void addBCCAddress( String sBCC )
    {
        listBCC.put( sBCC, "" );
    }

    /**
     * BCCを格納する
     * @param sBCC BCCアドレス
     * @param sAlias BCC別名
     * @throws AddressException
     */
    public void addBCCAddress( String sBCC, String sAlias )
    {
        listBCC.put( sBCC, sAlias );
    }



    /**
     * 件名を格納する
     * @param sSubject 件名
     */
    public void setSubject ( String sSubject )
    {
        this._Subject = sSubject;

    }

    /**
     * 本文を格納する
     * @param sBody 本文
     */
    public void setBody ( String sBody )
    {
        this._Body = sBody;
    }

    /**
     * 添付ファイルパスリスト
     * @param sFilePath
     */
    public void addAttachment( String sFilePath )
    {
        listFilePath.add( sFilePath );
    }

    /**
     * コンストラクタ
     * デフォルト値
     * SMTP:localhost
     * Port:25
     */
    public MailSender( )
    {}

    /**
     * コンストラクタ
     * デフォルト値
     * Port:25
     */
    public MailSender( String sSMTP )
    {
        this._SMTP = sSMTP;
    }

    /**
     * コンストラクタ
     * @param sSMTP SMTPサーバ
     * @param iPort ポート
     */
    public MailSender( String sSMTP, int iPort ) 
    {
        this._SMTP = sSMTP;
        this._Port = iPort;

    }

    /**
     * コンストラクタ
     * @param sSMTP SMTP
     * @param iPort ポート
     * @param sUserName 認証ID
     * @param sPassWord 認証パスワード
     */
    public MailSender( String sSMTP, int iPort, String sUserName, String sPassWord ) 
    {
        this._SMTP = sSMTP;
        this._Port = iPort;

        this._Auth = true;
        this._AuthUserName = sUserName;
        this._AuthPassWord = sPassWord;

    }

    /**
     * 送信定義生成
     */
    private Session getInitSession()
    {
        Properties oProps = new Properties();
        oProps.put( "mail.smtp.host", _SMTP );
        oProps.put( "mail.smtp.port", String.valueOf( _Port ) );
        oProps.put( "mail.smtp.auth", String.valueOf( _Auth ) );
        oProps.put( "mail.smtp.debug", String.valueOf( _Dubug ) );

        Session oSession = null;
        if ( _Auth == true )
        {
            oProps.put( "mail.smtp.socketFactory.port", String.valueOf( _Port ) );
            oProps.put( "mail.smtp.socketFactory.class", SSL_FACTORY );
            oProps.put( "mail.smtp.socketFactory.fallback", String.valueOf( false ) );

            oSession = Session.getDefaultInstance( oProps, new javax.mail.Authenticator()
            {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() 
                {
                    return ( new PasswordAuthentication( _AuthUserName, _AuthPassWord ) );
                }
            } );
        }
        else 
        {
            oSession = Session.getDefaultInstance( oProps );
        }
        oSession.setDebug( _Dubug );

        return ( oSession );
    }

    /**
     * メールアドレス定義
     * @param sAddress メールアドレス
     * @param sAlias 別名
     * @return メールアドレスオブジェクト
     * @throws AddressException
     */
    private InternetAddress setAddress( String sAddress, String sAlias ) throws AddressException
    {
        try 
        {
            return ( new InternetAddress( sAddress, sAlias, _AddressAliasEncode ) );
        }
        catch ( UnsupportedEncodingException e )
        {
            return ( new InternetAddress( sAddress ) );
        }
    }

    /**
     * 発信者メールアドレス定義
     * @return
     * @throws AddressException 
     */
    private Address getFromAddress() throws AddressException
    {
        Enumeration Keys = pearFrom.keys();
        if ( Keys.hasMoreElements() )
        {
            String sAddress = String.valueOf( Keys.nextElement());
            String sAlias = String.valueOf( pearFrom.get( sAddress ) );
            return ( setAddress( sAddress, sAlias ) );
        }
        else return ( new InternetAddress() );

    }

    /**
     * 送信者メールアドレス定義リスト
     * @return
     * @throws AddressException 
     */
    private Address[] getToAddressList() throws AddressException
    {
        InternetAddress[] listAddress = new InternetAddress[listTo.size()]; 
        Enumeration list = listTo.keys();

        int iIndex = 0; 
        while ( list.hasMoreElements() )
        {
            String sAddress = String.valueOf( list.nextElement() );
            String sAlias = String.valueOf( listTo.get( sAddress ) );
            listAddress[iIndex] = setAddress( sAddress, sAlias );
            iIndex++;
        }

        return ( listAddress );
    }

    /**
     * CCメールアドレス定義リスト
     * @return
     * @throws AddressException 
     */
    private Address[] getCCAddressList() throws AddressException
    {
        InternetAddress[] listAddress = new InternetAddress[listCC.size()]; 
        Enumeration list = listCC.keys();

        int iIndex = 0; 
        while ( list.hasMoreElements() )
        {
            String sAddress = String.valueOf( list.nextElement() );
            String sAlias = String.valueOf( listCC.get( sAddress ) );
            listAddress[iIndex] = setAddress( sAddress, sAlias );
            iIndex++;
        }

        return ( listAddress );
    }

    /**
     * BCCメールアドレス定義リスト
     * @return
     * @throws AddressException 
     */
    private Address[] getBCCAddressList() throws AddressException
    {       
        InternetAddress[] listAddress = new InternetAddress[listBCC.size()]; 
        Enumeration list = listBCC.keys();

        int iIndex = 0; 
        while ( list.hasMoreElements() )
        {
            String sAddress = String.valueOf( list.nextElement() );
            String sAlias = String.valueOf( listBCC.get( sAddress ) );
            listAddress[iIndex] = setAddress( sAddress, sAlias );
            iIndex++;
        }

        return ( listAddress );
    }

    /**
     * 添付ファイルが存在するかどうか
     * @return
     */
    private boolean isExistAttachment()
    {
        return ( listFilePath.size() > 0 );
    }


    /**
     * 本文
     * @return
     * @throws MessagingException
     */
    private MimeBodyPart getTextPart() throws MessagingException
    {
        MimeBodyPart oMbp = new MimeBodyPart();
              oMbp.setText( _Body, _TextEncode );

         return ( oMbp );
    }


    /**
     * ファイルパートを作成
     * @return
     * @throws MessagingException 
     * @throws IOException 
     */
    private MimeBodyPart[] getFilePart() throws IOException, MessagingException
    { 
            int iCount = listFilePath.size();
           MimeBodyPart[] listMbp = new MimeBodyPart[iCount];
           for ( int i = 0; i < iCount; i++ )
           {
               MimeBodyPart oMbp = new MimeBodyPart();
               // 添付するファイル名を指定
              FileDataSource fds = new FileDataSource( (String)listFilePath.get( i ) );
                oMbp.setDataHandler( new DataHandler( fds ) );
                oMbp.setFileName( MimeUtility.encodeWord( fds.getName(), _AttachmentFileNameEncode, "B" ) );
                //oMbp.setFileName( MimeUtility.encodeText( fds.getName(), _AttachmentFileNameEncode, "B" ) );
                listMbp[i] = oMbp;

            }
             return ( listMbp );
    }


    /**
     * メール送信
     * @return
     * @throws MessagingException 
     * @throws AddressException 
     * @throws SenderException メール送信エラー  
     * @throws IOException 
     */
    public void sendMail() throws AddressException, MessagingException, SenderException, IOException
    {
        //送信設定
        MimeMessage msg = new MimeMessage( getInitSession() );
        msg.setFrom( getFromAddress() );
        msg.setRecipients( Message.RecipientType.TO, getToAddressList() );
        msg.setRecipients( Message.RecipientType.CC, getCCAddressList() );
        msg.setRecipients( Message.RecipientType.BCC, getBCCAddressList() );
        //送信件名
        msg.setSubject( _Subject, _SubjectEncode );
        msg.setSentDate( new Date() );

        Multipart oMp = new MimeMultipart();
        oMp.addBodyPart( getTextPart() );

        //添付ファイル
        if ( isExistAttachment() )
        {
                MimeBodyPart[] aryFilePart = getFilePart();
                int iCount = aryFilePart.length;
                for ( int i = 0; i < iCount; i++ )
                {
                    oMp.addBodyPart( aryFilePart[i] );
                }
            }

        //送信コンテンツ本体
            msg.setContent( oMp );

            //送信処理
            sendMail( msg );
    }


    /**
     * メール送信
     * @param msg
     * @throws SenderException
     */
    private void sendMail( MimeMessage msg ) throws SenderException
    {
        try 
        {
            Transport.send( msg );
        }
        catch ( Exception e ) 
        {
            throw ( new SenderException( e ) );
        }
    }
}