0

現在、入力ストリームからメールを直接読み取ってから、何らかの操作を行ってから、変更されたメールを送信する必要があります。

メールの読み取りと変更に成功しました。これで、メールを元のメールとしてユーザーに転送できます。

そのためにメール関数を使用しましたが、メールを読んで本文に変数を設定しているため、このメール関数はメッセージを生の形式で送信します。フォーマットのように見える元のメール (実際のメッセージに変換された生のフォーマット?) として作成するにはどうすればよいですか?

#!/usr/bin/php -q
<?php

// read from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd))
{
    $email .= fread($fd, 1024);
}
fclose($fd);


mail('you@yoursite.com','subject of the mail','"' . $email . '"');  // problem

?>

出力:

Return-Path: <user1@abc.com>
Received: from abc.abc.com 
    by abc.abc.com  with ESMTP id r8CHQuwsvl019623
    for <abc@abc.com>; Thu, 12 Sep 2013 10:26:56 -0700
Received: from abc@abc.com ([xx.xx.xx.xx]) by  abc@abc.com ([xx.xx.xx.xx]) Thu, 12 Sep 2013 10:26:55 -0700
From:  <user1@abc.com>
To:  <user2@abc.com>        
Subject: Here is the subject
Thread-Topic: ACTION REQUIRED:  Here is the subject
Thread-Index: Ac6vLqD991sdflXReXHStipZDdjUh0dpgAoQZUQAANQNRA=
Date: Thu, 12 Sep 2013 17:26:55 +0000
Message-ID: <A61C9CD725DF1C4FA94C13E9C8BEE9C538A35785@az18ex3004.abc.com>
References: <53B09D5B548AF94EB5B6C48321C34F2E11CB1621@az18ex3006.abc.com>
In-Reply-To: <53B09D5B548AF93e4EB5B6C48321C34F2E11CB1621@az18ex3006.abc.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
x-originating-ip: [xx.xx.xx.xx]
Content-Transfer-Encoding: base64
MIME-Version: 1.0

asdfxGSIb3DQEHAqCAMIACAQsdfsdAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEgge4Q29u
dGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7DQoJYm91bmRhcnk9Ii0tLS09X05leHRQ
YXJ0XzAwMF8wMDkxXzAxQ0VBRkEyLjk5RTBFQUEwIg0KDQpUaGlzIGlzIGEgbsdfsdGlwYXJ0IG1l
c3NhZ2UgaW4gTUlNRSBmb3JtYXQuDQoNeddi0tLS0tLT1fTmV4dFBhcnRfMDAwXzAwOTFfMDFDRUFG
QTIuOTlFMEVBQTANCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsNCgljaGFyc2V0PSJ1cy1hc2Np
4

2 に答える 2

2

簡単なクラスがあります-GoogleコードのMimeMailParserです。チェックアウトできます。これにより、メールから本文とヘッダーを取得するのはかなり簡単になると思います。

$Parser = new MimeMailParser();
$fd = fopen("php://stdin", "r");
$Parser->setStream($fd);

$headers = $Parser->getHeaders();

$header = "";
$header .= "From: {$headers['from']}\r\n";
$header .= "Reply-To: {$headers['from']}\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";

$email = $Parser->getMessageBody('html');

それらを個別の変数で取得したら、次のようにメールを送信できます。

mail('you@yoursite.com',$header['subject'],$email, $header);

このソリューションは完全な方法ではありません。電子メールの html 部分のみが送信されますが、新しいことを試す良いスタートになります。幸運を

編集:ヘッダーは配列として格納されているようです。mailそれらを関数が受け入れる形式に入れる必要があります。上記のコードは既に修正済みです。

于 2013-09-13T13:12:18.783 に答える
0

ヘッダーでメールの形式を指定する必要がある場合があります。

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

mail('you@yoursite.com','subject of the mail','"' . $email . '"',$headers);  
于 2013-09-13T12:53:58.323 に答える