カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

ファイルを添付してメール送信3

この記事は最終更新日から1年以上経過しています。

PHPのmb_send_mail関数でファイルを添付してメールを送信するスクリプト

1$to   = "mailto@example.jp";
2$from = "mailfrom@example.jp";
3 
4$subject  = "件名";
5 
6$mailbody = "メール本文\n";
7 
8$boundary = md5(uniqid(rand())); //バウンダリー文字(パートの境界)
9 
10 
11$header = "From: $to\n"
12        . "Reply-To: $from\n"
13        . "X-Mailer: PHP/".phpversion()."\n"
14        . "MIME-version: 1.0\n"
15        . "Content-Type: multipart/mixed;\n"
16        . "\tboundary=\"$boundary\"\n";
17 
18$msg = "This is a multi-part message in MIME format.\n\n"
19     . "--$boundary\n"
20     . "Content-Type: text/plain; charset=iso-2022-jp\n"
21     . "Content-Transfer-Encoding: 7bit\n\n"
22 
23     . $mailbody."\n"
24 
25     . "\n";
26 
27 
28// 画像(upfileという名前でアップロードされたとする)
29if($_FILES["upfile"]["error"] == UPLOAD_ERR_OK) {
30 
31    $tmp   = $_FILES["upfile"]["tmp_name"];
32    $name  = $_FILES["upfile"]["name"];
33    $size  = $_FILES["upfile"]["size"];
34 
35    $array = explode(".", $name);
36    $nr    = @count($array);
37    $ext   = $array[$nr - 1];
38 
39    $name  = date("U").".".$ext;
40 
41    $fp = fopen($tmp, "r");
42    $contents = fread($fp, filesize($tmp));
43    fclose($fp);
44    $f_encoded = chunk_split(base64_encode($contents)); //エンコード
45 
46    $msg .= "--$boundary\n"
47         . "Content-Type: application/octet-stream;\n"
48         . "\tname=\"$name\"\n"
49         . "Content-Transfer-Encoding: base64\n"
50         . "Content-Disposition: attachment;\n"
51         . "\tfilename=\"$name\"\n\n"
52         . "$f_encoded\n"
53         . "\n";
54 
55} //[end if]
56 
57 
58// language establish
59mb_language("ja");
60 
61// original encoding
62$orgEncoding = mb_internal_encoding();
63 
64// specify internal encoding
65mb_internal_encoding("utf-8") ;
66 
67 
68//メール送信
69if(!mb_send_mail($mailto, $subject, $msg, $header)) {
70    echo "メールの送信に失敗しました。";
71}
72 
73// internal encoding take back
74mb_internal_encoding($orgEncoding);
この記事がお役に立ちましたらシェアお願いします
1,140 views

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です