このシリーズの目的
体系的なwebコーディングの訓練ができるようになるためにPHPの初学のきっかけかつ、PHPでログインフォームやフォームを実装することができるようになるために
上記のチュートリアルを進めているのでその備忘録。
内容
今回のチュートリアル
PHP Tutorial: Create Contact Form & Send an Email With Attachment Using PHPMailer v6
このチュートリアルでやること
・その7 の復習
成果物
sendemail.php
<?php
$msg = "";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Except;
use PHPMailer\PHPMailer\SMPT;
if (isset($_POST['submit'])) {
$subject = $_POST['subject'];
$email = $_POST['email'];
$message = $_POST['message'];
if (isset($_FILES['attachment']['name']) && $_FILES['attachment']['name'] != "") {
$file = "attachment/". basename($_FILES['attachment']['name']);
move_uploaded_file($_FILES['attachment']['tmp_name'],$file);
} else
$file = "";
mb_language("japanese");
mb_internal_encoding("UTF-8");
require 'vendor/autoload.php';
require 'Mailtrap-config.php';
$mail = new PHPMailer();
// Server
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Host = MAIL_HOST;
$mail->Username = MAIL_USERNAME;
$mail->Password = MAIL_PASSWORD;
$mail->SMTPSecure = MAIL_ENCRPT;
$mail->Port = SMTP_PORT;
// Recipients
$mail->setFrom($email);
// $toname = mb_encode_mimeheader("$name", 'ISO-2022-JP', 'B', "\n");
$mail->addAddress(TO);
// $mail->addAttachment($attachment);
// Content
$mail->Subject = mb_encode_mimeheader("$subject", "ISO-2022-JP", "UTF-8");
$mail->Body = mb_convert_encoding("$message","ISO-2022-JP", "UTF-8");
$mail->CharSet = 'ISO-2022-JP';
$mail->Encoding = "7bit";
$mail->addAttachment($file);
// Select HTML or NOT
$mail->isHTML(true);
if ($mail->send()) {
$msg = "Your Email has been sent, thank you!";
} else {
$msg = "Something wrong happend! Please try again!";
unlink($file);//サーバーに毎回添付したファイルが保存されないようにする。送信先には問題なく添付される。
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>PHP Mail Contact Form </title>
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<body>
<div class="container">
<div class="row justify-content-center">
<div class="col-md-6 mail">
<?php if ($msg != "") {
echo "$msg <br> <br>";
}
?>
<form action="sendmail.php" method="post" enctype="multipart/form-data">
<input class="form-control" type="text" name="subject" placeholder="Subject......"><br>
<input class="form-control" type="text" name="email" placeholder="Email......"><br>
<textarea class="form-control" name="message" placeholder="What`up?"></textarea><br>
<input class="form-control" type="file" name="attachment"><br>
<input class="btn btn-primary" type="submit" name="submit" value="Send Email">
</form>
</div>
</div>
</div>
</body>
</html>
変更点
unlink関数を使い、サーバーにユーザー側がアップロードした添付ファイルが残らないようにする。
メールには問題なくて添付されて送られるので問題ない。
また。Bootstrapを用いたフォームなのでテキスト要素にはform-controlクラスを付随。
今回のコードの注釈
unlink
unlink($file);
指定した引数を削除する。
この場合は$fileには添付ファイルのパスが代入されているので、それを削除するということはそのファイルを削除することになる。