「ZendFramework」カテゴリーアーカイブ

ZendFrameworkで添付メール送信

まずは普通にメール送信。
そのままだと日本語バケるので下記参照しつつ。
http://doremi.s206.xrea.com/zend/ref/zend_mail.html
http://framework.zend.com/manual/ja/zend.mail.character-sets.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
include 'Zend/Mail.php';
include 'Zend/Mail/Transport/Sendmail.php';

define('MY_MAIL_ENCODE', 'ISO-2022-JP');
define('MY_MAIL_INTERNAL', 'UTF-8'); // ソースがUTF-8なら

// return path の設定(エラーメールをXXX@XXX.XXに送信)
$tr = new Zend_Mail_Transport_Sendmail('-fXXX@XXX.XX');
Zend_Mail::setDefaultTransport($tr);

// ヘッダや送信先、本文などの設定
$mail = new Zend_Mail(MY_MAIL_ENCODE);
$mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64)
     ->setFrom('XXX@XXX.XX', myConvertEncode('送信者名'))
     ->setReplyTo('XXX@XXX.XX', myConvertEncode('返信先名'))
     ->setSubject(myConvertEncode('メール送信'))
     ->setBodyText(mb_convert_encoding('メール本文', MY_MAIL_ENCODE, MY_MAIL_INTERNAL), null, Zend_Mime::ENCODING_7BIT)
     ->addTo('XXX@XXX.XX', myConvertEncode('送信先名'))
     ->addBcc('XXX@XXX.XX', myConvertEncode('送信先名'));

// 送信
$mail->send();

function myConvert($str)
{
    $str = mb_convert_encoding($str, MY_MAIL_ENCODE, MY_MAIL_INTERNAL);
    $str = mb_encode_mimeheader($str, MY_MAIL_ENCODE, 'B');
    return $str;
}

ファイルを添付するには下記参照しつつ…
http://framework.zend.com/manual/ja/zend.mail.attachments.html

1
2
3
4
5
6
7
8
9
// CSVファイルを添付
$csv = file_get_contents('filename.csv');

// 添付データ作成
$at = $mail->createAttachment($csv, 'text/comma-separated-values');
$at->filename = 'filename.csv';

// 送信
$mail->send();

今回はCSVファイル送るのに使ったので、その辺は適宜読み替えで。
ZendFrameworkのサンプルは画像添付になってます。

とりあえずGMailで受信確認しました。結構簡単にできた!

ZendFrameworkでCSVファイルを生成

CSVファイルの生成が少し簡単に出来るみたいなのでメモ。

1
2
3
4
5
6
7
8
9
// Controler内で記述
// いつも通りにパラメータをセット
$this->view->params = $params;

// パラメータを反映したテンプレを取得
$content = $this->view->render('template.csv');

// 適当なファイル名で保存
file_put_contents('output.csv', $content);

テンプレートは普通のビューとかと同じようにPHPで記述します。

1
2
3
<? foreach ($this->params as $line) : ?>
<?=implode(',', $line) . "n" ?>
<? endforeach; ?>

通常はコントローラ名に連動して決まったりしますが、テンプレートファイル名を直接指定してデータを取得できます。

ソースはUTF-8でCSVはShift_JISとかよくあるので、file_put_content(‘output.csv’, mb_convert_encoding($content, ‘SJIS-WIN’, ‘UTF-8’) とかで出力の直前に変換したり出来て便利!
あ、あとCSVに限らずいろんなテキストファイルの生成に使えるよね。

しかし、最近JavaScriptばかりで久しぶりにPHPさわったよ。