aswww log

エンジニアの技術録。アプリとかウェブとか

FuelPHP1.6系でEmailパッケージの使用とハマったとこ

FuelPHPに元から付いているEmailパッケージを使ってみる。以下の公式の解説を見る限りかなりシンプルな実装になる。

 Email パッケージ
 http://press.nekoget.com/fuelphp_doc/packages/email/introduction.html

 Email パッケージの使用方法
 http://press.nekoget.com/fuelphp_doc/packages/email/usage.html

Email パッケージの使用方法どおりにとりあえず実装して実行したものの、エラーになる。Exceptionをcar_dumpで見てみたところ以下のメッセージが。

Failed sending email

ぐーぐる先生にお伺いしつつパッケージをパッケージのソースを見てエラーの発生場所を突き止めた。fuel/packages/email/classes/email/driver/mail.phpに以下の記載がある。

・
・
・
protected function _send()
{
    ・
    ・
    ・
    if ( ! @mail(static::format_addresses($this->to), $this->subject, $message['body'], $message['header'], '-oi -f '.$return_path))
    {
	throw new \EmailSendingFailedException('Failed sending email');
    }

FuelPHPのEmailパッケージは結局のところphpのmail関数で送っていたのだった。もしやmail関数は何かメールサーバーを立てないと使えないのでは?と考えまたぐーぐる先生にお伺い書けてみた。

» phpのmb_send_mail()利用にかんして
https://forums.ubuntulinux.jp/viewtopic.php?id=7394

やはりそうだったみたい。PEAR::MailはPHPだけでメールを送れるけど、mail関数はsendmailSMTPが必要みたい。急遽レンタルサーバーにてメールアカウントを設定。fuel/packages/email/config/email.php
fuel/app/config/email.phpにコピーして、以下を修正。

return array(
    'defaults' => array(
    'useragent'	=> 'FuelPHP, PHP 5.3 Framework',
    'driver'		=> 'smtp',
    ・
    ・
    ・
    'smtp' => array(
        'host'		=> 'server.host.jp',
        'port'		=> 25,
        'username'	=> 'account@server.host.jp',
        'password'	=> 'password',
        'timeout'	=> 5,
    ),

これでやっと動くようになった。。。いつも思うんだけどmail関数のマニュアルとかmail関数使用するパッケージとか、メールサーバーの準備が必要不可欠ってことをどこかに書いてほしい。設定だけですぐ使える思えちゃう。そしたらこんな迷わないのに。ヽ(`Д´#)ノ ムキー!!