Labs Zsrv Net

  • フォントサイズを大きくする
  • デフォルトフォントサイズ
  • フォントサイズを小さく

添付ファイル付のメール送信クラス

JoomlaのDBと設定諸々をGMAILにバックアップするために、
添付ファイル付のメール送信クラスを適当に作ってみた。

送れればいいやということで、別にクラスにする必要も
なかったのを適当に作ったのでかなり適当。

※注意
sendmailを使っているので、Windows上では動かない。。。

以下ソースとなる。

<?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;
     }

}

?>

 

使い方は、以下な感じ。

require_once('SendMail.class.php');
$mail =& new SendMail(' このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にして下さい ', ' このメールアドレスは、スパムロボットから保護されています。アドレスを確認するにはJavaScriptを有効にして下さい ', 'subject', 'body', '/etc/passwd,/etc/group');
//$mail->setCommand('cat'); // DEBUG用
$mail->execute();

最終更新 2006年 10月 23日(月曜日) 08:08