「Javaでメール送信処理」

 JavaでMail送信するためのサンプルプログラム。JavaMailだと正直コードが分かりづらい気がするので、Commons-emailを使うようにしています。

Javaサンプル

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeUtility;

import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.SimpleEmail;

/**
 * メール送信クラス
 */
public class MailSample
{
  private HashMap toAddress = new HashMap();

  private String fromAddress = null;

  private String fromName = null;

  private String charset = "UTF-8";

  private String subject = null;

  private String content = null;

  /**
   * @param args
   * @throws EmailException 
   * @throws IOException 
   * @throws IOException
   * @throws MessagingException
   * @throws AddressException
   * @throws EmailException
   */
  public static void main(String[] args) throws IOException, EmailException
  {
    // TestCode
    MailSample mail = new MailSample();
    mail.setContent("テストメール");
    mail.setFromAddress("xxxxx@xxxxx", "送信元名");
    mail.addToAddress("yyyyy@yyyyy", "送信先名");
    mail.setSubject("テストメール");
    mail.sendMail();
  }

  public void sendMail() throws IOException, EmailException
  {
    SimpleEmail email = new SimpleEmail();

    email.setHostName("mailserver");
    email.setAuthentication("username","password"); // 認証が必要な場合
    
    email.setCharset(this.charset);
    email.setSubject(this.subject);
    email.setContent(this.content, "text/plain; charset=" + this.charset);

    setFromAddress(email);
    setToAddress(email);

    email.send();
  }

  /**
   * 送信先を追加する。
   * @param address 送信先アドレス
   * @param name 送信先名
   */
  public void addToAddress(String address, String name)
  {
    toAddress.put(address, name);
  }

  /**
   * 送信元メールアドレス
   * @param address
   * @param name
   */
  public void setFromAddress(String address, String name)
  {
    this.fromAddress = address;
    this.fromName = name;
  }

  /**
   * デフォルトのキャラクターセット(UTF-8)を変更します。
   * @param charset
   */
  public void setCharset(String charset)
  {
    this.charset = charset;
  }

  /**
   * 件名を設定する。
   * @param subject
   */
  public void setSubject(String subject)
  {
    this.subject = subject;
  }

  /**
   * 本文を設定する。
   * @param content
   */
  public void setContent(String content)
  {
    this.content = content;
  }

  private void setToAddress(Email email) throws EmailException,
      UnsupportedEncodingException
  {
    for (Iterator it = toAddress.keySet().iterator(); it.hasNext();)
    {
      String address = (String) it.next();
      String name = (String) toAddress.get(address);
      if (name != null && !name.equals(""))
      {
        email.addTo(address, MimeUtility.encodeText(name, this.charset, "B"));
      } else
      {
        email.addTo(address);
      }
    }
  }

  private void setFromAddress(SimpleEmail email)
      throws UnsupportedEncodingException, EmailException
  {
    if (this.fromName != null && !this.fromName.equals(""))
    {
      email.setFrom(this.fromAddress, MimeUtility.encodeText(this.fromName,
          this.charset, "B"));
    } else
    {
      email.setFrom(this.fromAddress);
    }
  }
}