質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

4309閲覧

PDFファイルを添付したメールを送信したい

Kuriaki

総合スコア85

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/04/19 06:47

タイトル通りです。
昔csvを添付したメール送信をやった経験があって、今回pdfの添付もしようと思っていますが、添付がうまく行かないです。

エラーも出て来てないため、どこがダメなのかがわかりません。
添付できるようにするにはどう修正すればいいでしょうか?
回答よろしくお願いいたします。

php

1<?php 2session_start(); 3$name= $_POST['name']; 4$fname= $_POST['fname']; 5$gender=$_POST['gender']; 6$name2 =$_POST['name2']; 7$fname2=$_POST['fname2']; 8$time= $_POST['time']; 9$address= $_POST['address']; 10$tel= $_POST['tel']; 11$email=$_POST['email']; 12$class=$_POST['class']; 13$free=$_POST['free']; 14 15 16 17?> 18 19 20 21 22 <!DOCTYPE html> 23<html> 24<head> 25 <meta charset="utf-8"> 26 <title>xxxxxxxx</title> 27 <link rel="stylesheet" href="common/css/reset.css"> 28 <link rel="stylesheet" href="common/css/complete.css"> 29 30 31 32</head> 33<body> 34 35<div id="complete"> 36<h1>xxxxxxxxx</h1> 37<p style="line-height: 1.5;">xxxxxxxxx!<br /> 38xx。<br /> 39xxx<br /> 40TEL:xxx-xxxx-xxxx</p> 41</div> 42</body> 43</html> 44 45<?php 46if(isset($_POST["submit"], $_SESSION["ticket"]) && $_SESSION["ticket"] == $_POST["ticket"]){ 47 unset($_SESSION["ticket"]); 48 } 49else{ 50 exit(); 51} 52 53$ShiftJIS=array($name,$fname,$gender,$name2,$fname2,$address,$tel,$time,$class,$free,$email,date("Y年/m月/d日 H時i分s秒")); 54mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); 55 56mb_language("Japanese"); 57mb_internal_encoding("UTF-8"); 58 59$filepath = "xxxxxxxxxxxx/school.pdf"; 60 61 62$headers = "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\n"; 63 64 65$message = "--" . $boundary . "\n"; 66 67 68 69$message .= "https://www.yahoo.co.jp/school.pdf\n"; 70$message .= "--" . $boundary . "\n"; 71 72$message .= "Content-Type: application/pdf\n"; 73$message .= "Content-Disposition: attachment; filename=\"school.pdf\n"; 74$message .= "Content-Transfer-Encoding: base64\n"; 75$message .= "\n"; 76$message .= chunk_split(base64_encode(file_get_contents('school.pdf')))."\n"; 77 78$message .= "--" . $bound4ary . "--"; 79 80 81 82 $to = "$email"; 83 $subject = "xxxxxxxxxxxxxxx"; 84 $message ="「xxxxxxxxxxxxxx」xxxxxxxxx。\n 85名前:$name"."様\nふりがな:$fname"."様\n性別:$gender\n名前(保護者):$name2"."様\nふりがな:$fname2"."様\n住所:$address\n連絡先:$tel\nメール:$email\n学年:$class\n時間:$time\n時間変更可否:$free\n 86それではx月x日(x)当日お待ちしております。\n 87 ─────-- - - - - --─────\n 88 ┏┌┌┌┌ xxxxxx \n 89 ┏┏┌┌┌ xxxxxxxxxx\n 90 ┏┏┏┌┌ xxxxxxxxx1\n 91─────-- - - - - --───── \n"; 92 93 $headers = 'From: xxxxxxxxx.jp'."\r\n"; 94 $headers .= 'bcc: xxxxxxxxx.jp'."\r\n"; 95 96 97 98$send_mail = mb_send_mail($to, $subject, $message, $headers); 99 100?> 101

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

php

1$ShiftJIS=array($name,$fname,$gender,$name2,$fname2,$address,$tel,$time,$class,$free,$email,date("Y年/m月/d日 H時i分s秒")); 2mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); 3 4mb_language("Japanese"); 5mb_internal_encoding("UTF-8"); 6 7 8$filepath = "https://www.sakura.ne.jp/dd/pdf.pdf"; 9$boundary = "__BOUNDARY__"; 10 11$additional_headers = "Content-Type: multipart/mixed;boundary=\"" . $boundary . "\"\n"; 12$additional_headers .= 'From: xxx@xx.co.jp'."\r\n"; 13$additional_headers .='bcc: xx@xx.co.jp'."\r\n"; 14 15$message = "--" . $boundary . "\n"; 16$message .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n"; 17$message .="この度は「xxx」へのお申し込みありがとうございます。\n以下の内容でお申し込み承りました。\n 18名前:$name"."様\nふりがな:$fname"."様\n性別:$gender\n名前(保護者):$name2"."様\nふりがな:$fname2"."様\n住所:$address\n連絡先:$tel\nメール:$email\n学年:$class\n時間:$time\n時間変更可否:$free\n 19それではお待ちしております。\n 20 ─────-- - - - - --─────\n 21 ┏┌┌┌┌ xxxx \n 22 ┏┏┌┌┌ xxxxxx\n 23 ┏┏┏┌┌ TEL: 03-0333-0333\n 24─────-- - - - - --───── \n"; 25 26$message .= "--" . $boundary . "\n"; 27 28$message .= "Content-Type: application/pdf\n"; 29$message .= "Content-Disposition: attachment; filename=pdf.pdf\n"; 30$message .= "Content-Transfer-Encoding: base64\n"; 31$message .= "\n"; 32$message .= chunk_split(base64_encode(file_get_contents('pdf.pdf')))."\n"; 33 34$message .= "--" . $bound4ary . "--"; 35 36 37 38$to = "$email"; 39$subject = "お申し込み"; 40$send_mail = mb_send_mail($to, $subject, $message, $additional_headers); 41 42

投稿2017/04/20 05:49

Kuriaki

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/04/20 08:18

これ、ユーザ入力を元にメール発送させるスクリプトでしょうか? $email に大量のアドレスを入力し、$message に使われている変数にスパムメッセージを入れることで、砲台として利用可能です。 練習ならイイのですが、どこかで使用するのであれば、ちゃんと設計した方がいいですよ。
Kuriaki

2017/04/20 08:21

te2jiさん 回答ありがとうございます。 これってエスケープしてもダメですか?
退会済みユーザー

退会済みユーザー

2017/04/20 08:32

エスケープが何を指すのかちょっと分かりませんが、多分ダメです。 全体が見えないので、なんとも言えないですが、アドレスをカンマで区切って投稿すれば、複数の宛先に投稿されませんか? 簡易的なフィルタを作成するとしても、$email には1件だけしかアドレスが入らないようにする設計とし、$message に使用される変数は、入力文字数制限、住所はできるだけユーザの自由入力を許さないと行った工夫をする必要があります。 ちゃんとするには結構たいへんかと。
Kuriaki

2017/04/20 08:38

入力ページで入力制限かかってますので、多分大丈夫だと思います。 ご忠告ありがとうございました。
退会済みユーザー

退会済みユーザー

2017/04/20 08:54

こういった攻撃では、入力ページは使用せず、直接POSTするのが普通です。 入力ページでの制限は意味を持ちません。 ユーザ入力を自動返信の内容に含めず、受け付けたことだけを通知し、受付内容の確認は手動で送信することで、かなりの部分が改善されます。検討してみては?
Kuriaki

2017/04/20 09:00

そうですか、わかりました。 手動以外にほかの方法はないでしょうか? 数が多い場合、手動では追いつかないのではと思います。
退会済みユーザー

退会済みユーザー

2017/04/20 09:11

手動での発送をサポートするツールを作成するとかですかね。 投稿された内容をDBに保存しておき、アドレスと送信内容を表示して、送信ボタンを押せば、送信されるとかでよいかと。 おかしな投稿はスキップすれば、それなりの効果が上がると思います。 ただ、メールを使用したツールは、考慮点が多いので、ちゃんとした設計のできる人に相談した方がいいですよ。 SPAMの踏み台にされると、ドメインがブラックリストに登録されて、他のユーザに迷惑をかけたり、影響範囲が非常に広いです。。。
Kuriaki

2017/04/21 00:35

わかりました。 ありがとうございます。 いろいろと勉強になりました。 慎重に考えておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問