dポイントプレゼントキャンペーン実施中!

サーバーAで受信したメールを、.foward ファイルを使ってPHPスクリプトを起動させ、メールを加工し、加工したメールを
echo mail($to, $subject, $message, $headers);
として、サーバーBに送っています。
サーバーBでは、.foward ファイルを使ってサーバーCに転送しています。
サーバーBの .foward ファイルの中身、
-------------------------------------------------------------
(バックスラッシュ)myaccount
|myaccount@server_C.com
-------------------------------------------------------------

サーバーBで受信したメールの中身、
-------------------------------------------------------------
Return-Path: <myaccount@server_A.com>
X-Original-To: myaccount@server_B.com
Delivered-To: myaccount@server_B.com
Received: from server_A.com (unknown [192.168.120.55])
by server_B.com (Postfix) with ESMTP id 994874B2055
for <myaccount@server_B.com>; Sun, 2 Apr 2017 19:49:49 +0900 (JST)
Received: by server_A.com (Postfix, from userid 1000)
id 8FA9282F7EEE; Sun, 2 Apr 2017 19:49:49 +0900 (JST)
To: <myaccount@server_B.com>
Subject: test 6
X-PHP-Originating-Script: 0:mailtrans.php
Message-Id: <20170402104949.8FA9282F7EEE@server_A.com>
Date: Sun, 2 Apr 2017 19:49:49 +0900 (JST)
From: myaccount@server_A.com (myaccount)

★ibi1★myaccount@yahoo.co.jp様からのメールです。

This is Test Mail.

**************************************
会社名
代表者 XXXXXXXX
〒000-0000 岐阜県XXXXXXXX
TEL・FAX 123-45-6789
E-mail:myaccount@yahoo.co.jp
URL:xxxx://myaccount.webcrow.jp
-------------------------------------------------------------

しかし、サーバーCでは、メールは受信できるのですが本文がありません。
サーバーCで受信したメール
-------------------------------------------------------------
------Original Message------
差出人:"myaccount"<myaccount@server_A.com>
宛先:myaccount@server_B.com
CC:
件名:test 6
日時:2017年04月02日(月) 19:49(+0900)
myaccount@yahoo.co.jp様からのメールです。
-------------------------------------------------------------

そこで、サーバーAと同じように .foward ファイルを使ってPHPスクリプトを起動させ、メールを加工し、加工したメールをサーバーCに送ろうとして、
-------------------------------------------------------------
<?php
#-- PEAR の Mail/mimeDecode.php を読み込む
require_once 'Mail/mimeDecode.php';

#-- メールデータ取得
$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = file_get_contents("php://stdin"); // 標準入力
$params['crlf'] = "\r\n";
$mail_data = Mail_mimeDecode::decode($params);

#-- From フィールドの取得
$FromAddress = $mail_data->headers['from'];

#-- To フィールドの取得
$ToAddress = $mail_data->headers['to'];

#-- Subject フィールドの取得
$Subject = $mail_data->headers['subject'];
$Subject = mb_convert_encoding($Subject,"UTF-8","JIS");

#-- 本文の取得
$MailBody = $mail_data->body;
$MailBody = mb_convert_encoding($MailBody,"UTF-8","JIS");
?>
-------------------------------------------------------------
としましたが、本文が取得できませんでした。
たぶん、サーバーAからサーバーBに送ったメールがテキスト形式なので、上記のスクリプトでは本文の判断ができないのではないかと思っております。
PHPでテキスト形式のメールから本文を取得する方法、または、メールのファイル名を取得する方法をご存知の方がおられましたら、力を貸してください。
よろしくお願いします。

質問者からの補足コメント

  • うーん・・・

    サーバーAで受信したメールにはContent-Typeが指定されていますが、サーバBにはContent-Typeがありません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/04/04 11:16
  • どう思う?

    ご指摘いただいたように、サーバーAでmb_send_mail() 関数を使ったらContent-Typeの付いたメールを サーバーBで受信できました。
    テストをした環境
    Yahooメール
     ↓
    サーバーA
     ↓
    サーバーB
     | ↓
     | サーバーBの別のユーザーに転送…本文が見えました。
     ↓
    サーバーC…本文が見えません。

    これは、Content-Typeだけの問題ではなさそうな気がします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/04/04 18:14

A 回答 (3件)

手元の環境で確かめたら、mail() 関数は Content-Type を自動で付与しませんでした。



だったら、自分で付与すればよいです。

$headers .= "\r\nContent-Type: text/plain; charset=iso-2022-jp";
$headers .= "\r\nContent-Transfer-Encoding: 7bit";

mail() 関数ではなく、mb_send_mail() 関数を使用したら、Content-Type は自動で付与されました。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご提案いただいたように、mb_send_mail()関数を使用しました。
そして、本文を取り込むときに、 text・html の条件分岐で取り込みました。
貴重な提案、ありがとうございました。

お礼日時:2017/04/06 00:40

>サーバーAで受信したメールにはContent-Typeが指定されていますが、サーバBにはContent-Typeがありません。



でしたら…サーバAで処理しているphpスクリプトでContent-Typeヘッダを付与して送信するようにしてはどうでしょうか?
http://wa3.i-3-i.info/word11116.html
Content-Transfer-Encodingヘッダが必要になる場合もあるかも知れませんし、
MIME-Versionヘッダが必要になるかも知れません。
phpのmail()がどの程度対応しているのかは不明ですけど。

ただ…メールヘッダが原因ではない。という可能性もありますので、
その辺りはphpに詳しい方からの回答待ちといったところでしょうか…。
    • good
    • 0

phpとか触ったことありませんが…。



サーバB、サーバCそれぞれで受信したメールヘッダはそれで全てなんでしょうか?
Content-Typeとかのヘッダはないんですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!