やったことをメモ程度に。。。
まず、App/config/config.phpのpackagesにemailを追加
'packages' => array ( 'email', );
次にpackages/email/config/email.phpをApp/config/にコピーします。
ここでメールの設定。
(メールサーバとか文字コードとかドライバとか)
実際にメール送信するコードは以下
$email = Email::forge(); // $email->from('test@example.com', mb_encode_mimeheader('テストユーザ', 'jis')); $email->from('test@example.com', 'テストユーザ'); $email->to('hayashida@local.net'); // $email->subject(mb_encode_mimeheader('テストメール', 'jis')); $email->subject('テストメール'); $email->body(mb_convert_encoding($body, 'jis')); try { $email->send(); $message = '送信しました'; } catch (\EmailValidationFailedException $e) { $message = '送信に失敗しました。\n送信先のメールアドレスが正しくありません'; } catch (\Exception $e) { $message = '送信に失敗しました' . $e->getMessage(); }
こんなかんじでメール送信するみたいです。
ただ。。。開発環境で使ってるメールサーバ(WindowsにBlackJumboDog Ver4.2.3)でなかなか送信できませんでした。
原因としては「EHLO」コマンドにBlackJumboDogが対応していない。。。
「HELO」変えれないのかなって思ってFuelPHPのほうソース眺めてたらプログラム上は「EHLO」に失敗したら「HELO」を再送するようになってる。。。
よく見るとコマンド失敗したらエラーコードが返ってきたときにthrowされてるみたいで。。。バグ???
とりあえずpackages/email/classes/email/driver/smtp.php(行111目あたり)を以下のように修正。
// Just say hello! // if($this->smtp_send('EHLO'.' '.\Input::server('SERVER_NAME', 'localhost.local'), 250, true) !== 250) // { // // Didn't work? Try HELO // $this->smtp_send('HELO'.' '.\Input::server('SERVER_NAME', 'localhost.local'), 250); // } // // try // { // $this->smtp_send('HELP', 214); // } // catch(\SmtpCommandFailureException $e) // { // // Let this pass as some servers don't support this. // } try { try { $this->smtp_send('EHLO'.' '.\Input::server('SERVER_NAME', 'localhost.local'), 250); } catch(\SmtpCommandFailureException $e) { $this->smtp_send('HELO'.' '.\Input::server('SERVER_NAME', 'localhost.local'), 250); } // $this->smtp_send('HELP', 214); } catch (Exception $e) { throw $e; }
throwされてるからcatchしただけなんですが。。。
とりあえず動きました。
(もっといい方法があるかもしれないけど)
このあたり誰か詳しい方いたら教えて頂ければ助かります。
※2012.6.21
FuelPHP1.2からはメール送信時のmb_encode_mimeheaderは不要みたいです。
コード修正しました。
※2012.6.26
FuelPHP 1.2.1でバグ修正があったみたいです。
0 件のコメント:
コメントを投稿