目次へ

1.3. メールの送信

メールを送信するためには、session を利用して javax.mail.internet.MimeMessage オブジェクトを作成します。MimeMessage オブジェクトに送信先・メール内容を設定し、最後に javax.mail.Transport を用いてメールを送信します。

以下はメールの送信を行うプログラムです。プログラム引数で指定されたメールアドレスに対して、現在の時刻をメールで送信します。

import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.AddressException;
  
public class MailSend{  public static void main(String[] args){
    Properties properties=new Properties();
    properties.setProperty("mail.smtp.host", "localhost");
    Session session=Session.getDefaultInstance(properties);
    
    MimeMessage mimeMessage=new MimeMessage(session);
    // InternetAddressの作成
    InternetAddress[] toAddress=new InternetAddress[args.length];
    try{
      for(int i=0; i<args.length; i++){ 
        toAddress[i]=new InternetAddress(args[i]);
      }
    }catch(AddressException e){
      e.printStackTrace();
      return;
    }

    try{
      // 宛先の設定
      mimeMessage.setRecipients(MimeMessage.RecipientType.TO, toAddress);
      // 送信元の設定
      mimeMessage.setFrom(new InternetAddress("[email protected]"));
      // サブジェクトの設定
      mimeMessage.setSubject("The time is ...");
      // 本文の設定
      mimeMessage.setText(new Date().toString());
      // 設定の保存
      mimeMessage.saveChanges();
      // メールの送信
      Transport.send(mimeMessage);
    }catch(MessagingException e){
      e.printStackTrace();
      return;
    }
  }
}


メールを送信するためには、Session オブジェクトを用いて MimeMessage オブジェクトを作成します。MimeMessage オブジェクトが作成できると、それのメソッドを用いてメールの内容を設定していきます。以下はサンプルで使用しているメソッドの定義です。メールアドレスの指定には javax.mail.internet.InternetAddress を使用します。

メールの送信相手を指定します。第1引数で、「TO」「CC」「BCC」のいずれを指定するか、第2引数で送信相手のアドレスを指定します。
void setRecipeintType(javax.mail.Message.RecipientType type,
                      javax.mail.Address[] address)
  throws javax.mail.MessagingException
メールの From アドレスを指定します。
void setFrom(javax.mail.Address address) throws javax.mail.MessagingException
メールの Subject を指定します。
void setSubject(String subject) throws javax.mail.MessagingException
メールの本文を指定します。
void setText(String text) throws javax.mail.MessagingException

もし Subject および本文に日本語を指定したい場合には、引数を2つ取るメソッドを使用します。第2引数には文字コードを指定します。日本語の場合、メールは JIS コードですので、「ISO-2022-JP」を指定します。例えば以下のようになります。

mimeMessage.setSubject("現在の時刻は...", "iso-2022-jp");
mimeMessage.setText(new Date()+" です。", "iso-2022-jp");

メールに必要な情報を設定した後、javax.mail.Transport の send メソッドを用いてメールを送信します。例では送信前に設定した情報を保存する saveChanges メソッドを呼び出していますが、メール作成後、すぐに送信する場合は省略しても構いません。メールサーバに正しくメールを渡せると、例外を発生せずに処理は終了します。

(実習課題1)

サンプルのプログラムを作成し、実行しなさい。また以下の点で改良を行いなさい。

  • 引数で指定した1つ目のアドレスは TO 、2つ目以降は CC とする。
  • サブジェクトおよび本文に日本語を指定する。

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp