http://d.hatena.ne.jp/y_guriko/touch/searchdiary?word=*%5BCakePHP2.1%5D
このサイトを参考にし、app/Config/email.phpの箇所だけを
public $contact = array(
'transport' => 'Smtp',
'from' => array('hoge@gmail.com'(送信先のメルアド) => 'メールでの表示名'),
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'timeout' => 30,
'username' => 'hoge'(gmailのアカウント名),
'password' => '111111'(gmailのログインパスワード),
'log' => true
);
に変更しました
送信フォームに入力し、送信ボタンを押すと
「You need specify one destination on to, cc or bcc.
Error: An Internal Error Has Occurred.」
とエラーが出されます。ここで詰まってしまいました・・・。
CakeEmailについて、いくら検索しましても分かりやすい解説が見つかりませんでした。
もし、CakeEmailについて詳しい方がいらっしゃいましたら手を貸してくださいませんか?
コメント(9件)
エラーメッセージを機械翻訳でいいので、翻訳して確認してみてください。
使い方は以下のページが参考になりそうです。
ほぼ同じですが、複数のページを比較しながら確認してみてください。
http://rzpg.blogspot.com/2011/12/cakephp20cakeemail.html
http://www.b-prep.com/blog/?p=1293
http://d.hatena.ne.jp/lesamoureuses/20111106/1320584340
http://lab.tenfrontier.com/?p=252
エラーを翻訳しましたら
「あなたは、CCまたはBCCの1つの宛先を指定する必要があります。」
という意味らしいです。
app/Config/email.php内の
class EmailConfig {
public $gmail = array(
'host' => 'ssl://smtp.gmail.com',
'port' => 465,
'username' => '自分のgmailアカウント',
'password' => 'パスワード'
);
}
ここで宛先を設定していますが、違うのでしょうか?
上記でコメントした「http://lab.tenfrontier.com/?p=252」にもある通り、EmailConfig(email.php)で指定しても、$email->to('宛先メールアドレス')」(※$email = new CakeEmail('gmail');」した場合)で指定しても、どちらでも大丈夫なはずです。
-----------------------------------------------------
次に
->to( 'to_mailaddress@localhost' )
この部分ですが送信相手先のメールアドレスを指定しています。
EmailConfig内の「to」要素に直接指定しても構いませんが今回は「会員登録完了時に送るメール」
という例で進めているのでこうしています。
-----------------------------------------------------
'transport' => 'Mail',
'from' => '111222@gmail.com', // (実験のため送信先と同じ)
'to' => null, // どのメールアドレスに送るか
'subject' => '会員登録完了', // メールの件名
'sendAs' => 'text', // メールの形式(textメールかhtmlメールか)
'template' => 'regist' // 利用するテンプレート名(手順2と3で解説)
);
PagesController.phpに
public function regcomp()
{
$vars = array(
'account' => 'test',
'mailaddress' => '111222@gmail.com'
);
$email_instance = new CakeEmail();
$email_instance->config('gmail')
->to( '111222@gmail.com' )//送信先のメルアド
->viewVars( $vars )
->send();
}
app/View/Pages/regcomp.ctpに送信フォーム
<?php
echo $this->Form->create('Contact');
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('tel');
echo $this->Form->input('body');
echo $this->Form->end('送信');
?>
を書きました。
送信フォームに自身のメルアドを書いて送信ボタンを押しましても、
指定したメルアドにメールが送られてくる気配が全くありません。
自身の考えでは、サイトの問い合わせフォームにこの機能を使いたいと思っています。これを使えば可能ですよね?
初歩的な質問ですいません。
PHPのmail()で外部にメール送信できていますか?(※CakePHPを利用しない場合)
ローカルで試していて、mail()で外部にメールを送信できない場合は、CakePHP(CakeEmail)でも送信できないはずです。
transport、host等に関しては、元のGmailのSMTPサーバを利用する設定に戻してみてください。
※sendAsは指定していても送信されますが、一覧に載っていませんので不要かもしれません。(変更になったのかどうかは知りませんが、必要な場合はemailFormatで指定するようです。)
http://book.cakephp.org/2.0/en/core-utility-libraries/email.html
それから、openssl拡張を使用しますので、phpinfo()で確認して、有効になっていない場合は、有効にしてください。
上記の事が問題ないのに送信されない場合、ブラウザのキャッシュを削除してから試してみてください。
> 自身の考えでは、サイトの問い合わせフォームにこの機能を使いたいと思っています。これを使えば可能ですよね?
可能ですが、送信フォーム用に別のメソッドを作成して、アクションにregcompを指定しないと、今の状態ではフォームにアクセスしただけでメールが送信されてしまいます。
ただし、動作テストとして、メールの送信が確認されるまでは今のままでも構わないと思います。
う〜ん、CakeEmailを使って問い合わせフォームを作成している人は少なく感じます。
検索しましても、詳細な情報があまり出てこないので・・・。
みなさんは、どうやって問い合わせフォームを作成してるんだろ?
お二人ともありがとうございました!