<?php /** * メール送信クラス * @author labs zsrv net * @version 1.0.1 */ class SendMail { var $form = null; var $to = null; var $subject = null; var $body = null; var $files = null; var $handler = null; var $command = null; /** * コンストラクタ * @param $from 送信元アドレス * @param $to 送信先アドレス * @param $subject 件名 * @param $body 本文 * @param $filename 添付ファイル */ function SendMail($from, $to, $subject, $body, $files = array()) { $this->from = $from; $this->to = $to; $this->subject = $subject; $this->body = $body; $this->files = $files; } /** * メール送信 * @return true 成功 * false 失敗 */ function execute() { // メール送信 $boundary = "-*-*-*-*-*-*-*-*-Boundary_" . uniqid("b"); // 送信先 $from = $this->from; // 送信元 $to = $this->to; // サブジェクトをMIMEエンコード $subject = i18n_mime_header_encode(i18n_convert($this->subject, "SJIS")); // 本文をSJISに $body = i18n_convert($this->body, "SJIS"); // メールハンドラオープン if(is_null($this->command)) { $this->handler = popen("/usr/sbin/sendmail -f $from $to", "w"); } else { $this->handler = popen("$this->command", "w"); } // ヘッダ fputs($this->handler, "MIME-Version: 1.0\n"); fputs($this->handler, "Content-Type: Multipart/Mixed; boundary=\"$boundary\"\n"); fputs($this->handler, "Content-Transfer-Encoding:Base64\n"); fputs($this->handler, "From: $from\n"); fputs($this->handler, "To: $to\n"); fputs($this->handler, "Subject: $subject\n"); // 本文 fputs($this->handler, "--$boundary\n"); fputs($this->handler, "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n"); fputs($this->handler, "\n"); fputs($this->handler, "$body\n"); // 添付ファイル foreach($this->files as $file) { // ファイルチェック if(!is_file($file)) break; // ベース名取得 $basename = basename($file); // コンテンツ取得 $attach = file_get_contents($file); // 添付データをBASE64エンコード $attach = chunk_split(base64_encode($attach)); fputs($this->handler, "--$boundary\n"); fputs($this->handler, "Content-Type: application/octet-stream; name=\"$basename\"\n"); fputs($this->handler, "Content-Transfer-Encoding: base64\n"); fputs($this->handler, "Content-Disposition: attachment; filename=\"$basename\"\n"); fputs($this->handler, "\n"); fputs($this->handler, "$attach\n"); fputs($this->handler, "\n"); } fputs($this->handler, "--$boundary" . "--\n"); // クローズ pclose($this->handler); // 返却 return 0; } /** * Command(Handler)の設定(debug用) * 設定したcommandはexecute()で必ずクローズされる。 * @param command command */ function setCommand($command) { $this->command = $command; } } ?> |