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

2008/09/25 未分類 spok
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()が必要です。
なんせ、コントローラーが送信する方法ですから。

Return-Pathの設定

2008/09/25 未分類 spok

Windowsの場合

mail関数

windows版のPHPでmail関数を使う場合は、Return-Path はFromヘッダと強制的に一致となります。これは、PHP自体の制限です。

SMTP送信

smtpのパラメータのFromが、Return-Pathとなります。
SMTP送信の方法を参照してください。

Unix,Linuxの場合

mail関数

mtaOption関数を使用します。addHeaderで設定しても無視されますので注意してください。
qd_send_mail($option .....)の場合
$option = array(
    'type' => 'text',
    'option'=>array(
	'mtaOption'=>'-f return_address@example.com'
    ),
);

SMTP送信

smtpのパラメータのFromが、Return-Pathとなります。
SMTP送信の方法を参照してください。

Sendmailオプション

2008/09/11 未分類 spok
Sendmailへのオプションの渡し方

mail関数の第5引数は、MTAに渡すオプションです。お使いのサーバーがsendmailまたはsendmailラッパーであれば、使用することができます。
なお、SafeMode時には、このオプションは使用できず、Qdmailエラーとなります。

使い方

$mail -> mtaOption( 'オプション' );

オプション一覧

こちらが参考になります。Manpage of SENDMAIL

サンプルコード

(サーバーに配達記録をもらう設定)
qd_send_mail($option .....)の場合
$option = array(
    'type' => 'text',
    'option'=>array(
	'mtaOption'=>'-N success,failure -f return_address@example.com'
    ),
);
return_address@example.comには、貴方が返事をもらうためのアドレスを指定してください。
 -f はreturn-pathを設定するためのオプションです。
※windows版ではPHP自体の制限のため、Fromヘッダ、とReturn-Pathヘッダは強制的に一致となります。

OOPまたはeasy...メソッドの場合

$mail -> mtaOption( '-N success,failure -f retun_address@example.com' );

Dateヘッダーを指定する

2008/09/11 未分類 spok
Qdmailでは下記の指定をしておくと、Dateヘッダーを自動でつけてくれます。
(1.1.2以降)
OOP、easy方式
$mail -> timeZone( '+9000' );  // 日本時間の場合
qd_send_mail方式
$option = array(
  'type' => 'text',
  'option' => array( 'timeZone' => '+9000' )
);
ただし、Dateヘッダーが設定されている場合には、timeZone() は無視されます。
$mail -> addHeader() が優先するということです。

自分でDateヘッダーをつける場合

$mail -> addHeader('Date','Mon, 3 May 2008 22:30:00 +9000(JST)');