ようこそゲストさん

Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte

Symfonyで日本語メール送信(携帯デコメもOK)

Qdmailでは、1.1.3bよりSymfony対応となりました。
SYmfonyで簡単に携帯デコメ、添付ファイル、HTMLメールなど多彩なメールを送信することができます。

2つの送信方法

Symfonyでメールを送信する方法は大きく2つあります。(Symfony1.1.2にて動作確認)

1 ビューに送信を任す方法
2 コントローラーで送信する方法

いずれにせよ、何らかの形で、qdmail.phpをインクルードしてください。
また、それぞれのコントローラーに対応するビューも用意してください。

1 ビューに送信を任す方法

include('qdmail.php');

class mymoduleActions extends sfActions
{
  public function executeSendEmail()
  {
	$this->sendEmail('mymodule', 'SendQd');  
  }
  public function executeSendQd()
  {
	$mail = new sfQdmail();

	$mail -> addAddress('address@example.com','日本語宛先');
	$mail -> setFrom('from@example.com','日本語フロム');
	$mail -> setSubject('test Symfony');
	$mail -> setMailer('mail');

	$this->mail = $mail;

	$this->mytext = 'Text example';
  }
}
この方式の場合、$mail->send()をつけてはいけませんので、注意してください。
だって、ビューに送信をお任せするわけですから。
SendQdに対応するテンプレートをご用意下さい。それがメール本文となります。

使い方は、sfMailと全く同じです。(いくつか使えないメソッドはありますが)

なお、以下のコンフィグファイルに、デフォルト設定が入っています。
sf_sandbox\data\symfony\config\mailer.yml
default:
  deliver:           on
  mailer:            mail
  domain:            localhost.localdomain
  hostname:          localhost
  port:              25
  username:          ''
  password:          ''

  wordwrap:          80

  .headers:
    priority:        3
    content_type:    text/plain
    charset:         utf-8
    encoding:        8bit

2 コントローラーで送信する方法

include('qdmail.php');

class mymoduleActions extends sfActions
  public function executeSendEmail()
  {
	$mail = new sfQdmail();
	$mail -> addAddress('address@example.com','日本語宛先');
	$mail -> setFrom('from@example.com','日本語フロム');
	$mail -> setSubject('test Symfony');
	$mail -> setMailer('sendmail');

	$content = $this->getPresentationFor('mymodule','content');
	$mail -> html($content);

	$mail -> send();
  }

  public function executeContent()
  {
	$this->mytext = 'Text example';
  }
}
この方式の場合は、 ->send()が必要です。
なんせ、コントローラーが送信する方法ですから。

# brtRiver 2008年11月21日(金) 午後6時46分

すばらしいライブラリありがとうございます。使ってみようとsymfonyで使ってみると、PHP5でのエラー(Strict Standards)が発生します。
対応していただけると嬉しいです。^^;

# spok 2008年11月21日(金) 午後9時39分

大変恐縮ですが、ソースコード及びどこでどのようなエラーが発生しているかをお教え下さい。

# brtRiver 2008年11月21日(金) 深夜1時20分

以下のエラーが発生しました。
Strict Standards: Assigning the return value of new by reference is deprecated in /path/qdmail.1.2.6b/qdmail.php on line 661
Strict Standards: Assigning the return value of new by reference is deprecated in /path/qdmail.1.2.6b/qdmail.php on line 3677
Strict Standards: Assigning the return value of new by reference is deprecated in /path/qdmail.1.2.6b/qdmail.php on line 3771
Strict Standards: Assigning the return value of new by reference is deprecated in /path/qdmail.1.2.6b/qdmail.php on line 3820
Strict Standards: Declaration of QdmailComponent::smtpObject() should be compatible with that of QdmailBase::smtpObject() in /path/qdmail.1.2.6b/qdmail.php on line 3734

直接動作に影響があるエラーではないのですが。

# spok 2008年11月21日(金) 深夜2時04分

E_STRICTエラーはphp4では有効だったけど、PHP5では推奨しないものに対して発生するエラーです。ifでバージョン毎に分岐してわければ回避は可能とは思いますが、現状のPHP4でも動作させようという目論見では、残念ながら回避できておりません。
今後の課題にさせていただきます。

# brtRiver 2008年11月22日(土) 午前5時21分

ご確認ありがとうございます。
私のようにPHP5前提で開発を行う場合はポリシーとしてE_STRICTは出さないようにしているところも他にもあるかと思います。
ただ、ご回答いただいたようにPHP4のことを考慮されているという点から大変なのも非常に理解しています。
PHPMailerなどのようにPHP4版とPHP5版と分けてしまうというのもありかなとは思いますがそれまた管理が大変ですよね。
ありがとうございました。

# savewood 2010年02月22日(月) 午後7時14分

通りすがりですが、上記のエラーは、

new sfQdmail();

のところで発生するエラーですよね?
エラー制御演算子 (http://www.php.net/manual/ja/language.operators.errorcontrol.php) を使用して...

@new sfQdmail();

としてしまえば、エラー表示は抑制できますよ。
根本解決ではないですが...

# こんな感じ 2011年09月12日(月) 午後9時49分

PHP5なら以下のような感じでも問題ないように思います。
PHP4でも使うならここでバージョンを見て、場合分けすればいいような。

//$instance[0] = & new Qdmail();
$instance[0] = new Qdmail();


#  非公開コメント   
  • TB-URL  http://hal456.net/qdmail/096/tb/