やったことをメモ程度に。。。
まず、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 件のコメント:
コメントを投稿