7

生活を困難にするために、私が働いているクライアントは、PHP4.0で実行される非常に大規模で古いシステムを使用しており、追加のライブラリを追加することを望んでいません.

添付ファイルとそれに付随する text/html コンテンツの両方を含む PHP 経由で電子メールを送信しようとしていますが、両方を 1 つの電子メールで送信することはできません。

これにより、添付ファイルが送信されます。

$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\"";
$output = $attachment;

mail($emailTo, $emailSubject, $output, $headers);

これは text/html を送信します:

$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n";
$output = $emailBody; // $emailBody contains the HTML code.

これにより、添付ファイルの内容とともに text/html を含む添付ファイルが送信されます。

$headers = "Content-Type: text/html; charset='iso-8859-1'\r\n".$emailBody."\r\n";
$headers = "Content-Type: text/csv;\r\n name=\"result.csv\"\r\n Content-Transfer-Encoding: base64\r\n Content-Disposition: attachment\r\n boundary=\"PHP-mixed-".$random_hash."\"";
$output = $attachment;

私が知る必要があるのは、メール本文に text/html を含むメールを送信し、それに添付ファイルを追加する方法です。ここで本当に単純なものが欠けていると確信しています!

前もって感謝します。

4

2 に答える 2

14

よし、やっと解けた!参考のため:

$emailBody .= "<html><body>Blah</body></html>";
$emailSubject = "Subject";
$emailCSV = "\"Col1\", \"Col2\"\r\n"; // etc.
$attachment = $emailCSV;

$boundary = md5(time());

$header = "From: Name <address@address.com>\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\r\n";

$output = "--".$boundary."\r\n";
$output .= "Content-Type: text/csv; name=\"result.csv\";\r\n";
$output .= "Content-Disposition: attachment;\r\n\r\n";
$output .= $attachment."\r\n\r\n";
$output .= "--".$boundary."\r\n";
$output .= "Content-type: text/html; charset=\"utf-8\"\r\n";
$output .= "Content-Transfer-Encoding: 8bit\r\n\r\n";
$output .= $emailBody."\r\n\r\n";
$output .= "--".$boundary."--\r\n\r\n";

mail($emailTo, $emailSubject, $output, $header);
于 2013-01-23T11:00:52.433 に答える
2

PHPmail()関数を使用して添付ファイルを送信しようとすると、フラストレーションが溜まります。簡単に言えば、努力する価値がありません。現在のPHPバージョンであっても、試してみることを決してお勧めしません。私はいつも phpMailer のようなライブラリを使用します。

サードパーティのライブラリを使用することは許可されていないとおっしゃっていましたが、この場合、使用しないのはおかしいでしょう。1 日と 1 年の違いについて話しています。それは大したことです。PHPmail()関数を使用するのは非常に難しく、添付ファイルを送信するコードを最初から作成しようとすると、脆弱でバグの多いコードが残り、すべての場合において確実に動作するようになるまでには永遠の時間がかかります。これが、phpMailer のようなライブラリが存在する理由です。

したがって、彼らがあなたに何を求めているかに関係なく、phpMailerをダウンロードすることをお勧めします ( PHP4 バージョンはまだ利用可能です)。それが機能するかどうかを確認してください。(ダウンロード ページにはまだ非常に古いバージョンが含まれているため、PHP 4.0 で動作するものを見つけるのに十分な時間をさかのぼることができるはずです。簡単なデモを起動して、それが機能することを実証することで、サードパーティのライブラリに対するスタンスを和らげることができます。

(それが彼らのスタンスを和らげない場合、このプロジェクトが妥当な時間内に完了する見込みはあまりありません。その場合、あなたができる最善の方法は、プロジェクト価格の見積もりにいくつかのゼロを追加することですそして歯を食いしばる)

于 2013-01-23T10:12:22.507 に答える