FuelPHPでメール送信

作成日:2018-03-28, 更新日:2018-03-28

基本

・「fuel\app\config\config.php」の「always_load」の「packages」に「email」を追加。
・「fuel\packages\email\config」の「email.php」を「fuel\app\config」に複製
・「fuel\app\config\email.php」を修正

「fuel\app\config\config.php」

'always_load'  => array(
  ~ 略 ~
  'packages'  => array(
    //'orm',
    'email',
  ),
  ~ 略 ~

※「always_load」のトコがコメントされているときは解除する必要あり。「'always_load' => array(」に対応する「);」のトコも。

「fuel\app\config\email.php」を修正

・driverを修正。「mail, smtp, sendmail, noop」のどれか。
※基本、修正は不要。

送信テストと使い回し用の独自関数

$toMail  = 'tomail@example.com';
$title   = 'テストメール';
$body    = 'テストの本文';
$pramAry = array();

$resultMail = \Util_Email::mailSend($toMail, $title, $body, $pramAry);
if ( !$resultMail['status'] ) {
  // 送信失敗
  echo $resultMail['message'];
}

▼「/fuel/app/classes/util/email.php」

<?php
class Util_Email {
  const FROM_MAIL = 'hoge@example.com'; // 送信元のメアド
  const FROM_NAME = '丸ごとシマウマ'; // 送信元のメアドの名前
  
  /** メール送信
    *  ▼$pramAry['cc']、$pramAry['bcc']
    *  $pramAry['cc'] = 'xxx@xxx.com';                       // 名前なし・一人だけ
    *  $pramAry['cc'] = array('xxx@xxx.com'=>'○○○');      // 名前あり
    *  $pramAry['cc'] = array('xxx@xxx.com', 'xxx@xxx.com'); // 複数人
    *  $pramAry['cc'] = array('xxx@xxx.com'=>'○○○',
    *                         'xxx@xxx.com'=>'○○○');      // 複数人(名前あり)
    *
    *  ▼添付ファイル1つだけ
    *  $pramAry['attach'] = DOCROOT . "assets/img/xxx.png"
    *
    *  ▼添付ファイル複数
    *  $pramAry['attach']= array( DOCROOT . "assets/img/xxx.png",
    *                             DOCROOT . "assets/css/xxx.css"
    *                      );
   **/
  public static function mailSend($toMail, $title, $body, $pramAry=array()) {
    $result = array(
       'status'  => false,
       'message' => ''
    );
    
    //インスタンスの作成
    $email = \Email::forge('jis');
    
    $tmpFromMail = self::FROM_MAIL;
    $tmpFromName = self::FROM_NAME;
    if (isset($pramAry['fromMail'])) {
      $tmpFromMail = $pramAry['fromMail'];
      
      if ((isset($pramAry['fromName']))) {
        //$tmpFromName = mb_encode_mimeheader( $pramAry['fromName'], 'jis' );
        $tmpFromName = $pramAry['fromName'];
      }
      else {
        $tmpFromName = '';
      }
    }
    
    //メール情報の設定
    $email->from($tmpFromMail, $tmpFromName);
    $email->to($toMail);
    
    // cc
    if ( isset($pramAry['cc']) ) {
      $email->cc($pramAry['cc']);
    }
    
    // bcc
    if ( isset($pramAry['bcc']) ) {
      $email->bcc($pramAry['bcc']);
    }
    
    //$email->subject(mb_encode_mimeheader($title, 'jis'));
    //$email->body(mb_convert_encoding($body, 'jis'));
    $email->subject($title);
    $email->body($body);
    
    // 添付ファイル
    if ( isset($pramAry['attach']) ) {
      // 複数ファイルを添付するなら配列
      if ( is_array($pramAry['attach']) ) {
        foreach ($pramAry['attach'] as $rowAttach) {
          $email->attach($rowAttach);
        }
      }
      else {
        $email->attach($pramAry['attach']);
      }
    }
    
    try {
      //メール送信
      $email->send();
      $result['status'] = true;
    }
    catch (\EmailValidationFailedException $e) {
      $result['message'] = 'address error(EmailValidationFailedException)。<br />'
                         . $e->getMessage();
    }
    catch (\EmailSendingFailedException $e) {
      $result['message'] = 'send error(EmailSendingFailedException)。<br />'
                         . $e->getMessage();
    }
    catch(Exception $e) {
      //その他のエラー
      $result['message'] = 'error(Exception)。<br />'
                         . $e->getMessage();
    }
    
    return $result;
  }
}