JavaからGmailを使ったメール送信
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 ) );
}
}
}