Qdsmtpを使ってGmailを送信する

Web上で問い合わせフォームを実装する場合、CakePHPならばQdmailを使う人が多いと思います。
ただ、Qdmailってphp.iniのSMTPの値を使用するんですよね。なので、QdmailをラップするQdsmtpを使ってみようと思ったのですが、GmailSMTPサーバーに設定する際にちょっとハマりました。以下Qdsmtpの導入手順です。

1.Qdmail・Qdsmtpを取得

2009/03/10現在、Qdmailの最新バージョンは1.2.6b、Qdsmtpの最新バージョンは0.2.0aみたいです。
http://hal456.net/qdmail/
http://hal456.net/qdsmtp/

2.コンポーネントフォルダに配置

以下のフォルダに置いてください。とくにすることはありません(すげー)。

  • app/controllers/components

3.controllerで呼ぶ

使用するcontrollerで以下のように記述して下さい。というか、ほぼQdsmtpのサイトにある通りです(すげー)。

<?php
class QuestionsController extends AppController {

	var $name = 'Questions';
	var $helpers = array('Html', 'Form');
        // QdmailがQdsmtpを探すので、Qdsmtpを指定する必要はない
	var $components = array('Qdmail');

	function send() {

                // SMTPの設定値
		$param = array(
			'host'=>'ssl://smtp.gmail.com',
			'port'=>'465',
			'from'=>'address@gmail.com',
			'user'=>'address@gmail.com',
			'pass' => 'password',
			'protocol'=>'SMTP_AUTH',
		);

		$this->Qdmail->to('to_address@example.com');
		$this->Qdmail->subject('テスト');
		$this->Qdmail->from('address@gmail.com');

                // Qdsmtpを使用する場合は記述
		$this->Qdmail->smtp(true);
		$this->Qdmail->smtpServer($param);
		$this->Qdmail -> cakeHtml('本文');

		$this->Qdmail->send();
		
	}

}
?>

ここで注意するのが、$paramのhostにssl://smtp.gmail.comもしくはtls://smtp.gmail.comと記述することです。GmailSMTPサーバーにSSL/TLSを使用する必要があるので、それを指定しなければいけません。またuserは@gmail.comを含めて記述してください。
http://mail.google.com/support/bin/answer.py?hl=jp&answer=44793

4.php.iniの設定変更

そのまま送信するとunable to connect to ssl://smtp.gmail.com:465みたいなエラーになると思います。SSLで接続できないよ~ってことなんでしょうが、PHPでOpenSSLを有効にすればうまくいきます。以下のフォルダにあるphp.iniのextension=php_openssl.dllのコメントを外してください。


わーいハマったけど送信できました\(^o^)/