kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_TOPページに「お問合せ(自動作成依頼兼用)」画面を作った。

TOPページに「お問合せ(自動作成依頼兼用)」画面を作成した。
 <=5月11日 ・ファイルアップロードも追加した。・「お問合せ」だったのを「お問合せ(自動作成依頼兼用)」に変更した
<<背景>>
kazpgm.ddo.jp自宅サーバ(固定IPでない普通のインターネット環境)で
ダイナミックDNSサービスを使って立ち上げている。
メールサーバも立ち上げていて通常のSMTP25番POP110番が動いている。
しかしこのサーバから企業あてにメールを送信するとスパム扱いになる(ダイナミックDNSだから)のでプログラムからメールを出せないでいた。

<<とりあえず解決。Mailパッケージの勉強をかねて>>
根本解決は固定IPにして、ドメインを取得すればいいのだけどそこまでの余裕はない。そこでプロバイダのメールサーバとメールアドレスを使ってプログラムから「お問合せ(自動作成依頼兼用)」受付メールを出すようにした。
POP before SMTP」を使用するにはpearのMailパッケージを使用する。
<=これは会社の人に教えてもらったこと。その人はプログラムからGooglegmailをハンドリングしているといっていた。
 <=5月11日 ・ファイルアップロードしたファイルを自分宛のメールの添付ファイルにした。


<<手順>>
1.pear install -a Mail (Mailパッケージをインストール)

    [root@xxxx ~]# pear install -a Mail

2.pear install -a Mail_MIME (メールを送信する際に便利なMail_MIMEパッケージ)

    [root@xxxx ~]# pear install -a Mail_MIME

3.pear listで確認した。

    [root@xxxx ~]# pear list

4.php.iniのincludeパスを”/usr/local/php/lib/php”にする。(「Mail.php」はこの下にある)
  <=お助けTOOLではphp.iniのincludeパスは使っていない(プログラムの最初でお助けTOOL固定のpearにパスを通している。)んだけど。まあ気分的に書き換えとおこう。

    [root@xxxx ~]# vi /usr/local/php/lib/php.ini

    ;include_path = ".:/usr/local/include/php:/usr/local/lib/php"
    include_path = ".:/usr/local/php/lib/php"

5.アパッチ再起動

    # /etc/rc.d/init.d/httpd restart

6.プログラム
 <=5月11日 ・ファイルアップロードを追加したのでロジックを変更した。

■contact.phpから抜粋(http://kazpgm.ddo.jp/contact/contact.php

<?php
require_once('../common_user.php');
require_once('AppCheckUtil.php');
require_once('AppSrchUtil.php');

    //------------------------------------------------------
    // お助けTOOLではpearのバージョン違いを吸収するため 
    // .phpの下に必要なpearを持っている。 
    // ここで使用する「Mail.php」「Mail/mime.php"」は持っていないので
    // include_pathsに追加している。
    //------------------------------------------------------
    $include_paths = array();
    $include_paths = explode(PATH_SEPARATOR, get_include_path());
    $include_paths[] = '/usr/local/php/lib/php';
    set_include_path(join(PATH_SEPARATOR, $include_paths));

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

    ・・・

// 入力値のチェック
function validCheck(&$vars, $mode) {
・・・

    // 秘密ファイル
    $result = AppCheckUtil::checkPhoto($errorMessages,
      "「テーブル項目一覧などの定義_★お助けTOOL_Sample.xls」zip圧縮",  
      $result, "teigifile", false,'0', array( "zip" ));

    // ■--PGM<<008>> end--------------------------------------------
    if ($mode=='ins_confirm') {
        $itemNames2S = array();
        $itemNames2S[] = 'teigifile';
        setPhotoTemp($itemNames2S, $vars);
    }

    return $errorMessages;
}

// 追加実行
function insDoTbl() {
    global $ELEMENTS;

    //------------------------------------------------------
    // お助けTOOLではsmartyを使ってメール文を作成しているが
    // 今回は直接編集している。
    //------------------------------------------------------

    $toMail        = $_REQUEST['inmail'];
    $toName        = $_REQUEST['name'] ."様";
    $msgSubj        = "kaz PHP自動作成お助けTOOL【お問合せ(自動作成依頼兼用)】";    
    $fromMail        = ADMIN_FROM_ADDRESS;
    $fromName        = "【kaz PHP自動作成お助けTOOL】";
    
    // 追加部分 -----------------------------------------------------------------------------------
    
    $toLine = "======================================================================". "\n";
    
    $toHeader1 = " WEB(kaz PHP自動作成お助けTOOL)からのお知らせ". "\n";
    
    $toNameHeader1 = " " . $_REQUEST['name'] . 
        "様 この度はお問合せ(自動作成依頼兼用)をして頂きありがとうございました。". "\n";
    $toNameHeader2 = " " . $_REQUEST['name'] . 
        "様のお問合せ(自動作成依頼兼用)の内容は以下の通りです。". "\n";
    $toNameHeader3 = " 後ほどご連絡いたします。". "\n\n";
    
    $toFooter1 = "■こちらのメールに覚えがない方は". "\n";
    $toFooter2 = "  他の方が誤ってあなたのメールアドレスでお問い合わせをした可能性があります。". "\n";
    $toFooter3 = " その場合は、たいへんお手数ですが、" . ADMIN_FROM_ADDRESS . "まで、". "\n";
    $toFooter4 = " このメールをそのまま転送してください。". "\n";
    $toFooter5 = " ご面倒・ご迷惑をおかけしますが、よろしくお願いいたします。". "\n\n";
    $toFooter6 = "このメールに対するお問い合わせ先" . ADMIN_FROM_ADDRESS. "\n";
    
    $tomFooter1 = "●お客様情報". "\n";
    $tomFooter3 = "";
    $tomFooter4 = "【お問合せ(自動作成依頼兼用)内容】". "\n";

    $m_string2 = "【会社名  】". $_REQUEST['company'] . "\n";
    $m_string3 = "【担当者名 】". $_REQUEST['name'] . "\n" .
                 "【部署名  】". $_REQUEST['post'] . "\n" .
                 "【郵便番号 】". $_REQUEST['address1'] . "-" . $_REQUEST['address2'] . "\n" .
                 "【住所   】". $_REQUEST['address'] . "\n" .
                 "【電話番号 】". $_REQUEST['tel'] . "\n" .
                 "【FAX番号  】". $_REQUEST['fax'] . "\n" .
                 "【メールアドレス】". $_REQUEST['inmail'] . "\n" .
                 "【定義ファイルzip圧縮】". 
                 ($_REQUEST['new_teigifile']==''?'添付ファイルなし':'添付ファイルあり') . "\n";
    $m_string10 = $_REQUEST['incontent'] . "\n";
    $m_string11 = '';

    $msgBody = '';
    $msgBodyWise = '';
    $msgBody.=$toLine;
    $msgBody.=$toHeader1;
    $msgBody.=$toLine;
    $msgBody.=$toNameHeader1;
    $msgBody.=$toNameHeader2;
    $msgBody.=$toNameHeader3;
    $msgBody.=$tomFooter1;
    $msgBody.=$m_string2;    
    $msgBody.=$m_string3;
    $msgBody.=$m_string11;
    $msgBody.=$tomFooter4;
    $msgBody.=$m_string10;
    $msgBody.=$toFooter1;
    $msgBody.=$toFooter2;
    $msgBody.=$toFooter3;
    $msgBody.=$toFooter4;
    $msgBody.=$toFooter5;
    $msgBody.=$toLine;
    $msgBody.=$toFooter6;
    $msgBody.=$toLine;


    // ユーザへメール。
    mailSender587( '【WEB】'. $toName .'様', $toMail, '【WEB】'.$fromName , 
                   $fromMail, $msgSubj, $msgBody, false, "" );
    // 管理者へメール。
    $msgBody = "★ お客様から問い合わせがありました。内容は以下のようです". "\n\n" . $msgBody;
    $addFL = '';
    if ($_REQUEST['new_teigifile'] !='') {
        $addFL = DIR_UPLOAD_SECRET . 'temptemptemp/' . $_REQUEST['new_teigifile'];
    }
    mailSender587( '【WEB】'.$fromName, $fromMail, '【WEB】'.$fromName , 
                   $fromMail, $msgSubj, $msgBody, false, $addFL);

}

     /**
     * メールを587ポートで送信する
     *
     * @access public
     * @param string $mailtoName 宛先名
     * @param string $mailto 宛先アドレス
     * @param string $mailfromName 差出人名
     * @param string $mailfrom 差出人アドレス
     * @param string $subject メールの件名
     * @param string $body メールの本文
     * @param string $cSpFlg mb_chunk_splitするかしないか
     * @param string $addFL 添付ファイル
     */

function mailSender587( $mailtoName, $mailto, $mailfromName, 
                 $mailfrom, $subject, $body, $cSpFlg = true, $addFL = '' ) {

    $params = array(
        'host'     => SMTP,
        'port'     => 587,
        'auth'     => false,
    //    'auth'     => true,
        'username' => MAIL_USER_NAME,
        'password' => MAIL_USER_PASS,
        'debug'    => false,
    );


    $mailObject = Mail::factory("smtp", $params);

    $recipients = $mailto;

     // JIS変換
    $body = mb_convert_encoding($body, "ISO-2022-JP", "auto");

    $mimeObject = new Mail_Mime("\n");
    $mimeObject -> setTxtBody($body);

    if ($addFL != '') {
        $mimeObject -> addAttachment($addFL);
    }

    $bodyParam = array(
      "head_charset" => "ISO-2022-JP",
      "text_charset" => "ISO-2022-JP"
    );

    $body = $mimeObject -> get($bodyParam);

    $addHeaders = array(
      "To" => $mailto,
      "From" => $mailfrom,
      "Subject" => mb_encode_mimeheader($subject)
    );

    $headers = $mimeObject -> headers($addHeaders);

    $e = $mailObject -> send($recipients, $headers, $body);

    if ( PEAR::isError($e) ){
        echo $e->getMessage() . "\n";
        exit;
    }
}


?>

7.画面イメージ

8.メールイメージ

5/09 23:00-01:00
5/10 07:00-09:00、18:00-23:30

補足)
「'【WEB】'. $toName .'様'」とかパラメータにあるけど使っていない。これは「送信先」に「【WEB】XX XX様」ってだしたかったから。でもうまく出なかった。まだ調査する必要ありってことだけどとリあえず完了。


追加)
昨日浅草いった。いいところ。5月連休明けの最初の土曜日はわりとすきだ。すいてるし、全体的にふぅっと一息ついている感じがする。観光地の店の人も観光客も力が抜けているところがいい。ということで写真です。
五重の塔。光が差し込むところで何かアピールしています。

ブリキの犬。顔を振ることができます。顔振る映像を取ろうとしたら、店の中に外人さんカップルが座ってしまったので取れませんでした。喫茶店の入り口においてありました。どこかで一度みたことあるような懐かしさがあります。

■サイト:http://kazpgm.ddo.jp/