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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

PEAR

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

Q&A

5回答

8050閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

PEAR

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

0グッド

1クリップ

投稿2015/12/19 07:04

編集2016/01/04 07:47

さくらレンタルサーバーにて、メール受信をトリガーとして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プログラムを起動させています。

TEXT

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

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

fuga.php

PHP

1#!/usr/local/bin/php 2<?php 3 require_once '/home/アカウント名/www/pear/PEAR/Mail/mimeDecode.php'; 4 5 //メールソースを標準入力から読み込み 6 $source = file_get_contents("php://stdin"); 7 if(!$source) { 8 exit(); // 読み込み失敗 9 } 10 11 //メール解析 12 $params['include_bodies'] = true; 13 $params['decode_bodies'] = true; 14 $params['decode_headers'] = true; 15 $decoder = new Mail_mimeDecode($source); 16 $structure = $decoder->decode($params); 17 $mail = $structure->headers['from']; 18 $mail = addslashes($mail); 19 $mail = str_replace('"','',$mail); 20 $mail = preg_replace('/(^.*<|>$)/', '', $mail); 21 $subject = $structure->headers['subject']; 22 $subject = mb_convert_encoding($subject, "UTF-8", "jis,iso-2022-jp"); 23 $mailBody = $structure->body; 24 $mailBody = mb_convert_encoding($mailBody,"UTF-8","jis,iso-2022-jp"); 25 26 //----------------------------------------// 27 //本文取得し、処理 28 //省略しています。 29 //処理後、送られたメールアドレス宛に返信する 30 //----------------------------------------// 31 32 mb_internal_encoding("UTF-8"); 33 mb_language("japanese"); 34 mb_send_mail($to, $subject, $body, $from);

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

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

投稿2016/07/18 11:21

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

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

投稿2016/07/18 10:21

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2016/07/17 04:36

zico_teratail

総合スコア907

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2016/01/04 09:14

crhg

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

投稿2015/12/19 08:06

Ken.sakanakana

総合スコア1768

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問