質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • PEAR

    146questions

    PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。

メール受信をトリガーにPHPプラグラムを実行

受付中

回答 5

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 3,381
退会済みユーザー

退会済みユーザー

さくらレンタルサーバーにて、メール受信をトリガーとしてPHPプログラムを実行させ
メール送信するというプログラムを作っています。

その途中で立ち止まってしまったことがあり、ご教授頂きたいです。
iPhoneで送信すると、きちんとPHPプログラムが処理され、返信が来るのですが、GメールやAndroidだとエラーメールが返ってきます。

エラーメールの内容が下記です。
----- The following addresses had permanent fatal errors -----
<hogehoge@hoge.com>
    (reason: 255)

----- Transcript of session follows -----
554 5.3.0 unknown mailer error 255

調べてみたのですが、解決策が見当たりませんでした。

.mailfilterを使用してPHPプログラムを起動させています。

cc "| /usr/local/bin/php -q /home/アカウント名/www/hogehoge/hoge/fuga.php"

.mailfilterのパーミッションは600。
fuga.phpのパーミッションは744。

fuga.php

#!/usr/local/bin/php
<?php
    require_once '/home/アカウント名/www/pear/PEAR/Mail/mimeDecode.php';

    //メールソースを標準入力から読み込み
  $source = file_get_contents("php://stdin");
  if(!$source) {
      exit();    // 読み込み失敗
  }

  //メール解析
  $params['include_bodies'] = true;
  $params['decode_bodies'] = true;
  $params['decode_headers'] = true;
  $decoder = new Mail_mimeDecode($source);
  $structure = $decoder->decode($params);
  $mail = $structure->headers['from'];
  $mail = addslashes($mail);
  $mail = str_replace('"','',$mail);
  $mail = preg_replace('/(^.*<|>$)/', '', $mail);
  $subject = $structure->headers['subject'];
  $subject = mb_convert_encoding($subject, "UTF-8", "jis,iso-2022-jp");
  $mailBody = $structure->body;
  $mailBody = mb_convert_encoding($mailBody,"UTF-8","jis,iso-2022-jp");

  //----------------------------------------//
  //本文取得し、処理
  //省略しています。
  //処理後、送られたメールアドレス宛に返信する
  //----------------------------------------//

  mb_internal_encoding("UTF-8");
  mb_language("japanese");
  mb_send_mail($to, $subject, $body, $from);

このように組んでいます。
iphoneは正常に動作しています。

gmailやandroidのメールソフトだとエラーになります。
またガラケーにも対応していきたいと考えています。

よろしくお願いします!!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

0

gmailですが、body部分はなくすべてmimeのmultipartなメールがやってきます。
mimeDecode.phpの処理がよくわかりませんでしたので、$bodyの値がわからず、的外れな回答でしたらすみません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

プログラムのどこでエラーになっているかもわからない状態だとかなり手探りですね。メールシステムの方で何かログが出ているかもしれません。/var/logあたりにあるはずなので探ってみましょう。

またこの手のデバッグはいきなりメール受信で全部動かす状態だとやりにくいので、簡単なプログラムでどのようなメールが受信されているのかファイルに保存して(元のプログラムだと$sourceを適当なファイルに書き出すようにする)、目的のプログラムは手で起動して保存したファイルを標準入力から食わせてある程度きちんと動く状態に持って行き、それからメール受信に組み込むという風に段階を踏んだ方がいいです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

デバッグとして、fuga.php内にある全ての変数($mailBodyなど)の中身をテキストファイルなどに書き出して確認してみればいいのではないでしょうか。

また、その書き出した内容を掲載すればより良い回答が得られると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

件名と本文のエンコーディングを iso-2022-jp に決め打ちされているようですが、Gmail で送信するメールのエンコーディングは UTF8 です。

Gmailから送信するときのエンコードが UTF-8 に統一されました

調べていませんが、おそらく Android もそうでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

$structure->body で本文が取れるのは、 $structure->ctype_primary が text の場合だけです。
ほかの方からのご指摘の通り、マルチパートの場合の処理を行ってください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24054questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • PEAR

    146questions

    PEAR (PHP Extension and Application Repository)はPHPで利用する事ができるライブラリです。