スレッド表示 | フラット表示〕 全トピック 920 件中 861 番目 次≫ ≪前

メールフォームの添付について

created: 2003-05-17 21:55 | modified: 2003-05-19 18:19 | reply: 7

[331] メールフォームの添付について

user: yagi ホームページ | created: 2003-05-17 21:55
mail関数やmb_send_mail関数で添付ファイルを送信することはできるのでしょうか?

それとも、手動でMIMEエンコード、BASE64エンコードを施して、
sendmailなりへパイプするようにする方法になるのでしょうか?
reply: 332 返信 編集 削除

[332] 添付の失敗状況

user: yagi | created: 2003-05-18 15:00
mail関数を使って添付ファイルを送信してみました。が!!
添付ファイルがbase64エンコードされたまま表示されてしまいました(^^;
メールヘッダ部分はちゃんと表示されているのですが。
それから、MIMEデータの境界IDも表示されてしまっている次第であります。

「おいおい、そこがちゃうやろ」

って思われる方、ご回答のほどお願いいたします。
Parent: 331  reply: 333 返信 編集 削除

[333] 失敗状況が全く不明

user: unadon ホームページ | created: 2003-05-18 18:32
サーバーの環境(OS,sendmail,qmail,etc)だとか,失敗したコードだとか全く示されないのでなんとも言えませんねぇ..
技術MLじゃないので,できるだけ「想像」して書きますが,全然的はずれかもしれません.

ヘッダ,改行は¥r¥nです.
Parent: 332  reply: 334 返信 編集 削除

[334] これは失礼しました(^^;

user: yagi | created: 2003-05-18 19:47
いや、失礼しました(^^;
書いたあとのことですが、そんながつっこみがくるであろうと確信してました(苦笑)

それは、さておき。
次のようにしましたところ、上記のようなことになってしまったという次第であります。
unadonさんの的確なつっこみを期待しております。
よろしくお願いいたします。

if ($_FILES[file][size]) { if (!is_uploaded_file($_FILES[file][tmp_name])) { error_page('UPLOAD ERROR!!', '添付ファイルが不正です'); } }

$fp = @fopen($_FILES[file][tmp_name], 'rb') or error_page('OPEN ERROR!!', "[ $_FILES[file][tmp_name] ]");
flock($fp, LOCK_EX); // ロック開始
$attach = fread($fp, filesize($_FILES[file][tmp_name]));
flock($fp, LOCK_UN); // ロック解除
fclose($fp);

$fname = $_FILES[file][name];
$subject = i18n_mime_header_encode($_GET[ttl]);

// 日本語ファイル名のMIMEエンコード
$fname = i18n_mime_header_encode($fname);

// 添付File内容のbase64エンコード + RFC2045方式にフォーマット
$attach = chunk_split(base64_encode($attach));

$addr = getenv('REMOTE_ADDR');
$host = gethostbyaddr($addr);

// メールボディのレイアウト
$msg =<<<MAIL
名 前:$_GET[name]
メール:$_GET[mail]
ホーム:$_GET[home]
ホスト:$host ($addr)
用 件:$_GET[bsns]

$_GET[cmt]
MAIL;

$boundary = 'boundary----------' . uniqid('b');

$head .= "MIME-Version: 1.0";
$head .= "Content-Type: Multipart/Mixed; boundary='$boundary'";
$head .= "Content-Transfer-Encoding: Base64";
$head .= "Subject: $subject";

$body .= "--$boundary\n";

$body .= "Content-Type: text/plain; charset='ISO-2022-JP'\n";
$body .= "\n";
$body .= "$msg\n";

$body .= "--$boundary\n";

$body .= "Content-Type: application/octet-stream; name='$fname'\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "Content-Disposition: attachment; filename='$fname'\n";
$body .= "\n";
$body .= "$attach\n";

$body .= "--$boundary--\n";

// メールを送信
@mail($CFG[to], $subject, $body, $head);
Parent: 333  reply: 335 返信 編集 削除

[335] とりあえず一個

user: unadon ホームページ | created: 2003-05-18 20:04
ですから,ヘッダ改行は「\r\n」



http://www.php.net/manual/ja/function.mail.php

--引用--
> 注意 複数のヘッダを区切る場合、\r\nを使用する必要 があります。ただし
> 、いくつかのUnix MTA(Mail transfer agents)では 改行文字(\n)だけでも
> 動作します。 Win32システムでは、Cc: ヘッダは大文字小文字を区別し、 C
> c:と書く必要があります。Bcc:ヘッダはWin32シ ステムではサポートされて
> いません。

RFCも読みましょう.
Parent: 334  reply: 336 返信 編集 削除

[336] おお!2度つっこみ

user: yagi | created: 2003-05-18 21:45
2回目のするどいつっこみありがとうございます(^^)

\r\nを付加することでメールヘッダが表示されるに至りましたが、
今度はメール本文と添付ファイルが表示されない状態です(^^;

つっこみアドバイスをお願いいたします。
Parent: 335  reply: 338 返信 編集 削除

[338] $head と $body

user: unadon ホームページ | created: 2003-05-19 13:18
ちゃんとしましょう.
ごちゃまぜですぜ.
Parent: 336  reply: 339 返信 編集 削除

[339] メールヘッダ部ですね

user: yagi | created: 2003-05-19 18:19
ヘッダ部に余計なヤツがいますね(^^;
しかし、あれを削除しても結果は同じになりました。

同じような手順で添付ファイルを送信しないタイプのプログラムを組んでみたところ、
こちらは何も問題なく表示されました。

どうやら、添付ファイルのエンコード手順に問題がありそうです。
(かなり試行錯誤してまして、頭が混乱状態です)
Parent: 338  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 861 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑