2010/03/04

[PHP]添付ファイル付きメールを送信

だいぶ前にPHPでのメール送信について書きましたが、今日は、添付ファイル付メールの送信方法について書きたいと思います。

参考にさせていただいたのは、PHPで日本語メールを送る - 応用編 (添付ファイル、HTMLメール)

require_once("Mail.php");
require_once("Mail/mime.php");

//メール送信
$to = "送信先";
$subject = "タイトル";
$body = "内容";
$from = "送信元";
$attachfile = "添付ファイルのパス";

$mail = Mail::factory("mail");
$mime = new Mail_Mime("\n");
$mime->setTxtBody($body);
//添付ファイル追加
$mime->addAttachment(
$attachfile
, "image/png"
);

$body = $mime->get();

$headers = array(
"To" => $to
, "From" => mb_encode_mimeheader("")."<".$from.">"
, "Subject" => mb_encode_mimeheader($subject)
);
$header = $mime->headers($headers);
$return = $mail->send($to,$header,$body);

//メール送信がエラーだった場合
if (PEAR::isError($return)){
print($return->getMessage());
exit();
}

ほとんどリンク先の内容と変わらないのですが、違うところといえば、添付ファイルを追加するメソッドaddAttachmentメソッドをコール時に引数を、「application/octet-stream」ではなく、「image/png」にしている点。

今回は、画像ファイルしか送らないので、添付ファイルのコンテントタイプに合わせて変更を加えました。

今書いていて思ったのは、添付ファイルが2つ以上ある場合、各ファイルに応じてコンテントタイプもそれに合わせて変えていく必要があるのかなと。

またエンコードの指定をデフォルトに設定してあります。
というのも送りたい内容が、全部英語だったので、日本語の設定は必要ないと思いエンコードの指定を行いませんでした。

理屈としては、二つPEAR標準のモジュールをインクルードしています。
Mail/mime.php
(公式リファレンスは、こちら)

Mail
Mailモジュールは、Mail::factory()とMail::send()しかなくて、Mail::factory()でメールプロトコルの設定、Mail::send()で実際の送信作業を行っています。

メールのタイトル、送信者、送信元、内容などについては、MIMEプロトコルに従う必要があるので、Mail_Mimeを使ってガンガン設定していると考えればわかりやすいのかなと。

これで添付ファイル付きメールが送れるようになったので、より便利なメール送信ができるのかなと。


ブックオフで下の本が半額で売られていたんだけど、今度、買おうかな??

0 コメント:

コメントを投稿