投稿者 メッセージ
<  PHPプログラミング  ~  添付可能なメールフォームに関して
bongoneko
投稿1時間: 日 9月 17, 2006 4:00 pm  引用



登録日: 2006年9月 17日
投稿記事: 1

 PHPのことをあまり理解していない者ですが、お知恵を貸していただければ幸いです。

 今まで会社のメールフォームをPHPを使ってやっていたのですが、今回からそれにファイル添付機能を付けて欲しいとの要望があり四苦八苦しています。

 今までの方法はHTMLで作成したメールフォームに情報を読者に記入してもらい、それをmail.phpに渡して、

mail($ToName." <".$ToEmail.">",$ToSubject, $EmailBody, "From: ".$FirstName." <".$Email.">");

を使ってメール送信するという方法をとっていました。

 しかし、添付ファイルはマルチパートにしなくてはいけないということから、

$mp = popen("usr/sbin/sendmail -f $from $to", "w");

 に乗り換えようとしているのですが、エラーは出ない代わりにメールの受信ができないのです(メールの送信がされていない?)。ちゃんとsendmail は指定されている場所にあるはずなのですが、上手くいきません。$to を指定のメルアドに変えても上手くいきません。

 下記にソースを記述しておきますので、原因、もしくはヒント等を教えていただけたら幸いです。

<?
//--------------------------- 添付ファイル付きメール送信関数
// sendAttachMail( $from, $to, $subject, $body, $attach_data, $filename);
// ---------------------------------------------------------
// From, To は、メアドのみを渡す。 "who" とかは駄目。
// $subject, $body, $attach_data, $filename のエンコードは関数内でやるので、
// 普通に EUC を渡せば OK 。
//----------------------------------------------------------
function
sendAttachMail ( $from, $to, $subject, $body, $attach, $filename) {
$boundary = "-*-*-*-*-*-*-*-*-Boundary_" . uniqid("b");

### 添付するデータを、base64 でエンコードして、RFC に適した書式に
$attach = chunk_split(base64_encode($attach));

### ファイル名を sjis にして MIME エンコード。
### RFC 違反なので日本語ファイル名は使用しないほうがいい。
## $filename = i18n_mime_header_encode( i18n_convert($filename, "SJIS") );

### メールの送信
$mp = popen("usr/sbin/sendmail -f $from $to", "w");

########################## メールの組み上げ
### 全体のヘッダ
fputs($mp, "MIME-Version: 1.0\n");
fputs($mp, "Content-Type: Multipart/Mixed; boundary=\"$boundary\"\n");
fputs($mp, "Content-Transfer-Encoding:Base64\n");
fputs($mp, "From: $from\n");
fputs($mp, "To: $to\n");
fputs($mp, "Subject: $subject\n");

### メール本文のパート
fputs($mp, "--$boundary\n");
fputs($mp, "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n");
fputs($mp, "\n");
fputs($mp, "$body\n");

### 添付ファイルのパート
fputs($mp, "--$boundary\n");
fputs($mp, "Content-Type: application/octet-stream; name=\"$filename\"\n");
fputs($mp, "Content-Transfer-Encoding: base64\n");
fputs($mp, "Content-Disposition: attachment; filename=\"$filename\"\n");
fputs($mp, "\n");
fputs($mp, "$attach\n");
fputs($mp, "\n");

### マルチパートのおわり。
fputs($mp, "--$boundary" . "--\n");
pclose($mp);
}

$from = "$Email";
$to = "test@doesntexist.com";
$subject = "Mail Form";
$body = "$message";
$attach_data = "$attach";
$attach_data .= "";
$attach_data .= "";
$filename = "head_shot";

sendAttachMail( $from, $to, $subject, $body, $attach_data, $filename);

?>

ここまで読んでいただき、真に有難うございます。
トップに移動
ユーザー情報を表示 メッセージを送信
特定期間内の記事を表示:   
All times are GMT +9:00

次のトピックを表示
前のトピックを表示
Page 1 of 1
フォーラム一覧  ~  PHPプログラミング

トピックの新規投稿   返信


 
移動先:  

新規投稿: 不可
返信: 不可t
自分の記事の編集: 不可
自分の記事の削除: 不可
投票への参加: 不可




Powered by phpBB
customized by phpspot.