CAKEPHPで空メールを受信するその2

前回で空メール受信時にCAKEのシェルが起動するようになりました。

今回はシェルの中身をどう書けばよいのかについて軽く触れたいと思います。

4). receiver.sh の中身

   ※ CAKEPHPの場合メールの中身がDispatch->stdinに格納されています。

   $stdin = $this->Dispatch->stdin
   $mailParams = $this->__getMailData($stdin);

   //空メールを返信したり色々な処理

function __getMailData($stdin)でメールを解析してそれぞれ配列に格納して返却しています。

5). function __getMailData()

function __getMailData($stdin) {
    $mail = "";
    $mailParams = array();
    $from = array();
    $headers = array();
    $address = array();

    while( !feof($stdin)) {
        $mail .= fgets($stdin, 4096);
    }

    $params['include_bodies'] = true;
    $params['decode_bodies'] = true;
    $params['decode_headers'] = true;
    $params['crlf'] = "\r\n";

    $decoder = new Mail_mimeDecode($mail);
    $decoded = $decoder->decode($params);

    $body = $decoded->body;
    $headers = $decoded->headers;

    $body = mb_convert_encoding($body, mb_internal_encoding(), 'ISO-2022-JP');
    $from = mb_convert_encoding($headers['from'], mb_internal_encoding(),'ISO-2022-JP');
    $to = mb_convert_encoding($headers['to'], mb_internal_encoding(),'ISO-2022-JP');
    $sender = mb_convert_encoding($headers['sender'], mb_internal_encoding(),'ISO-2022-JP');
    $headers = mb_convert_encoding($headers, mb_internal_encoding(), 'ISO-2022-JP');

    ereg("[0-9a-zA-Z_\.\-]+[0-9a-zA-Z_\.\-\@]+", $from,$address);

    $mailParams['address'] = $address['0'];
    $mailParams['body'] = $body;
    $mailParams['to'] = $to;
    $mailParams['from'] = $from;
    $mailParams['sender'] = $sender;
    $mailParams['header'] = $headers;

    return $mailParams;
}