All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.uchicom.smtp.SmtpUtil Maven / Gradle / Ivy

// (C) 2014 uchicom
package com.uchicom.smtp;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

/**
 * SMTPの処理で使用するユーティリティークラス.
 *
 * @author uchicom: Shigeki Uchiyama
 */
public class SmtpUtil {

  private static DateTimeFormatter dateTimeFormatter = DateTimeFormatter.RFC_1123_DATE_TIME;
  /**
   * コマンドがEHLOかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがEHLOの場合はtrue,それ以外はfalse
   */
  public static boolean isEhlo(String cmd) {
    return cmd.matches(Constants.REG_EXP_EHLO);
  }

  /**
   * コマンドがSTARTTLSかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがSTARTTLSの場合はtrue,それ以外はfalse
   */
  public static boolean isStartTls(String cmd) {
    return cmd.matches(Constants.REG_EXP_START_TLS);
  }

  /**
   * コマンドがHELOかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがHELOの場合はtrue,それ以外はfalse
   */
  public static boolean isHelo(String cmd) {
    return cmd.matches(Constants.REG_EXP_HELO);
  }

  /**
   * コマンドがRSETかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがRSETの場合はtrue,それ以外はfalse
   */
  public static boolean isRset(String cmd) {
    return cmd.matches(Constants.REG_EXP_RSET);
  }

  /**
   * コマンドがMAIL_FROMかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがMAIL_FROMの場合はtrue,それ以外はfalse
   */
  public static boolean isMailFrom(String cmd) {
    return cmd.matches(Constants.REG_EXP_MAIL_FROM);
  }

  /**
   * コマンドがRCPT_TOかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがRCPT_TOの場合はtrue,それ以外はfalse
   */
  public static boolean isRcptTo(String cmd) {
    return cmd.matches(Constants.REG_EXP_RCPT_TO);
  }

  /**
   * コマンドがDATAかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがDATAの場合はtrue,それ以外はfalse
   */
  public static boolean isData(String cmd) {
    return cmd.matches(Constants.REG_EXP_DATA);
  }

  /**
   * コマンドがQUITかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがQUITの場合はtrue,それ以外はfalse
   */
  public static boolean isQuit(String cmd) {
    return cmd.matches(Constants.REG_EXP_QUIT);
  }

  /**
   * コマンドがNOOPかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがNOOPの場合はtrue,それ以外はfalse
   */
  public static boolean isNoop(String cmd) {
    return cmd.matches(Constants.REG_EXP_NOOP);
  }

  /**
   * コマンドがVRFYかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがVRFYの場合はtrue,それ以外はfalse
   */
  public static boolean isVrfy(String cmd) {
    return cmd.matches(Constants.REG_EXP_VRFY);
  }

  /**
   * コマンドがEXPNかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがEXPNの場合はtrue,それ以外はfalse
   */
  public static boolean isExpn(String cmd) {
    return cmd.matches(Constants.REG_EXP_EXPN);
  }

  /**
   * コマンドがHELPかどうかをチェックする.
   *
   * @param cmd コマンド
   * @return コマンドがHELPの場合はtrue,それ以外はfalse
   */
  public static boolean isHelp(String cmd) {
    return cmd.matches(Constants.REG_EXP_HELP);
  }

  public static boolean isAuthLogin(String cmd) {
    return cmd.matches(Constants.REG_EXP_AUTH_LOGIN);
  }

  /**
   * ステータス行を出力する.
   *
   * @param ps 出力ストリーム
   * @param strings 文字列配列
   */
  public static void recieveLine(PrintStream ps, String... strings) {
    for (String string : strings) {
      ps.print(string);
    }
    ps.print(Constants.RECV_LINE_END);
    ps.flush();
  }

  /**
   * ファイルコピー処理
   *
   * @param from 元ファイル
   * @param to コピー先ファイル
   * @param mailAddress Eメールアドレス
   * @param senderHostName 送信元ホスト名
   * @param localHostName ローカルホスト名
   * @throws IOException 通信エラーの場合
   */
  public static void copyFile(
      File from, File to, String mailAddress, String senderHostName, String localHostName)
      throws IOException {
    try (@SuppressWarnings("resource")
            FileChannel ic = new FileInputStream(from).getChannel();
        @SuppressWarnings("resource")
            FileChannel oc = new FileOutputStream(to).getChannel(); ) {

      StringBuffer strBuff = new StringBuffer(1024);
      strBuff.append("Received: from ");
      strBuff.append(senderHostName);
      strBuff.append("\r\n");
      strBuff.append("	by ");
      strBuff.append(localHostName);
      strBuff.append("\r\n");
      strBuff.append("	for <");
      strBuff.append(mailAddress);
      strBuff.append(">; ");
      strBuff.append(dateTimeFormatter.format(OffsetDateTime.now()));
      strBuff.append("\r\n");
      ByteBuffer buff = ByteBuffer.wrap(strBuff.toString().getBytes());
      oc.write(buff);
      long current = 0;
      long size = ic.size();
      while (current < size) {
        current += ic.transferTo(current, size, oc);
      }
    } catch (IOException e) {
      throw e;
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy