edo1z blog

プログラミングなどに関するブログです

fuelphp - メール送信

参考: Email パッケージの使用方法 Fuelphp:Fuelphpで基本的なメール送信処理

コントローラーで下記を読み込むらしい。

\Package::load('email');

下記みたいな感じでとりあえずできた。日本語文字化け対策で、上記参考サイトの、■ Emailクラスの設定ファイルというところの対策をやった方がいいらしい。

public function get_index()
{
    $this->template = View::forge('public/template');

    $data = array();
    $this->template->title = 'お問い合わせ';
    $this->template->content = View::forge('public/contact/index', $data);
}

public function post_index(){
    $this->template = View::forge('public/template');
    $this->template->title = 'お問い合わせ';

    $data = Input::post();
    if(!$data || empty($data['name']) || empty($data['mail']) || empty($data['content'])){
        $data = array('error_msg' => '全項目を入力してください。');
        $this->template->content = View::forge('public/contact/index', $data);
        return;
    }

    $result = $this->send_mail($data);
    switch($result){
        case 1:
            $data = array('mail_success' => true);
            break;
        case 2:
            $data = array('error_msg' => '正しいメールアドレスを入力してください');
            break;
        case 3:
            $data = array('error_msg' => 'メールが送信できませんでした。恐れ入りますが、再度お試しください。');
            break;
    }

    $this->template->content = View::forge('public/contact/index', $data);
}

/**
 * メール送信関数(通常のお問合せ)
 */
private function send_mail($data){
    $admin_email = $this->make_mail($data, true);
    $user_email = $this->make_mail($data, false);

    try
    {
        $user_email->send();
        $admin_email->send();
        return 1;
    }
    catch(\EmailValidationFailedException $e)
    {
        // バリデーションが失敗したとき
        return 2;
    }
    catch(\EmailSendingFailedException $e)
    {
        // ドライバがメールを送信できなかったとき
        return 3;
    }
}

/**
 * メール作成関数
 */
private function make_mail($data, $admin = false){
    $admin_mail = __('site_info.admin_mail');
    $subject = __('site_info.contact_mail_subject');

    $email = \Email::forge('jis');
    $email->from($admin_mail);

    if($admin){
        $email->subject('[管理]' . $subject);
        $email->to(array(
            $admin_mail,
        ));
    }else{
        $email->subject($subject);
        $email->to(array(
            $data['mail'],
        ));
    }

    $body = \View::forge('public/email/contact', $data);
    $email->body(mb_convert_encoding($body, 'jis'));
    return $email;
}