![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
サーバー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でテキスト形式のメールから本文を取得する方法、または、メールのファイル名を取得する方法をご存知の方がおられましたら、力を貸してください。
よろしくお願いします。
No.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 は自動で付与されました。
ご提案いただいたように、mb_send_mail()関数を使用しました。
そして、本文を取り込むときに、 text・html の条件分岐で取り込みました。
貴重な提案、ありがとうございました。
No.2
- 回答日時:
>サーバー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に詳しい方からの回答待ちといったところでしょうか…。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Gmail 【お助け!】サーバーからのメール送信でGmailに送信されない問題について 1 2023/06/20 22:03
- サーバー お名前ドットコムの共用サーバー 送信済みメールをサーバーから削除できるか? 2 2023/03/01 10:44
- その他(メールソフト・メールサービス) メールソフトからの送信ができなくなりました 6 2022/11/21 19:35
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP php 完了画面の送信メールのコードを書いているのですが・・・ 2 2023/06/02 12:01
- Outlook(アウトルック) 休みが明けてメールをみたらやばいです 3 2022/08/17 09:03
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- その他(IT・Webサービス) 301リダイレクトの使い方について 7 2022/04/05 17:50
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mb_send_mailでタイトルにハテ...
-
さくらサーバーにて、phpからメ...
-
cronでメールを送信すると文字...
-
PEAR::Mailを使ったメール本文...
-
指定した時間にPHPプログラムを...
-
POSTで送られたアドレスから@以...
-
PHPでのフォーム送信・・・・
-
phpでのメール送信
-
sendmail.phpとthanks.php
-
mb_send_mailについて
-
mb_send_mail関数が利用出来ない
-
フォントの色を変えるには?
-
リンク先を隠す方法はないでし...
-
AccessのDoCmd.SendObjectについて
-
HYのAM11:00のラップの部分の歌...
-
【file_exists】ファイルが存在...
-
「クラス関数」「メンバ関数」...
-
openCVの超解像処理
-
全角ファイル名をアップロード...
-
配列とオブジェクトの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
php 完了画面の送信メールのコ...
-
さくらサーバーにて、phpからメ...
-
メールフォームのタイトルが文...
-
ローカル環境でのメール送信
-
mb_send_mail関数が利用出来ない
-
PHPsendmailにて送信元を変更
-
mail関数を使った場合のReturn-...
-
複数行の文字列をメールのヘッ...
-
phpでのメール転送(添付ファイ...
-
PHPで、複数のアドレスにメール...
-
000webhost.comでphpのmail()
-
サーバーによってはmb_send_mai...
-
【初歩?】変数をセットできな...
-
phpでメール送信できません 原...
-
PHPMailerのコードエラーが解決...
-
POP Before SMTPでメールを送信...
-
コマンドプロンプト、VBSでの添...
-
PHPからロリポップ!のメールサ...
-
mailやmb_send_mail関数で、本...
-
phpでのメール送信
おすすめ情報
サーバーAで受信したメールにはContent-Typeが指定されていますが、サーバBにはContent-Typeがありません。
ご指摘いただいたように、サーバーAでmb_send_mail() 関数を使ったらContent-Typeの付いたメールを サーバーBで受信できました。
テストをした環境
Yahooメール
↓
サーバーA
↓
サーバーB
| ↓
| サーバーBの別のユーザーに転送…本文が見えました。
↓
サーバーC…本文が見えません。
これは、Content-Typeだけの問題ではなさそうな気がします。