PHP7　composerを使わずにPHPMailerをセットアップ (メモ)

<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js"></script>
##まえがき
PHPをXAMPP環境で構築してなかったり、composerをインストールできない環境だったりで
PHPMailerを手作業でセットアップしないといけない人へ…
ぐぐっても近しいものがないし、なんだか手間取ってしまったので
まとめておきます。参考程度で…。
※PHPMailer公式ではcomposerでのインストールが推奨されてます。
<h2>【環境】</h2>
OS: Windows系
Apache: 2.4.33（Win32）
PHP: ver 7.2.5
PHPMailer: PHPMailer-6.0.5
メールの踏台：Gmail

##PHPMailerのダウンロード

公式より本体をダウンロード。
Zip形式でダウンロードしてください。<br>
<a href="https://github.com/PHPMailer/PHPMailer">PHPMailer公式</a><br>
![PHPMailer_001.jpg](https://qiita-image-store.s3.amazonaws.com/0/260102/d07e95a3-3140-a543-d6e5-f3b430e2c0ad.jpeg)
<br>

##PHPMailer本体のインストール
先ほどダウンロードした中身を設置します。
場所は公開フォルダ上ならどこでもいいような気がしますが、
自分は公開しているフォルダと同じ場所に「PHPMailer」という名前のフォルダを作りました。
PHPMailerフォルダ内は本体を丸ごと入れておく。
![キャプチャ2.JPG](https://qiita-image-store.s3.amazonaws.com/0/260102/3296f8ee-1ecd-a195-49e7-bcaef1cbbb6e.jpeg)

##php.iniの確認
OPENSSLが有効か確認する。
下記のオプションを例のごとく「；」を外しApache再起動する。
これをしないとエラーはいて怒られます。
;extension=php_openssl.dll<br>
再起動後PHPinfo()を実行してOPENSSLの項目あるか確認。
![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/260102/9e6a9df3-19e8-f418-ddb5-cc7e9fb699fa.png)<br>
<h2>フォームの作成</h2>
見た目がダサいとか、ソースがきたねぇとかは全力で無視して、
とりあえず適当なメール送信フォームを作成。

「send.php」にPOSTします。

【mail_form.html】

```
<!-- mail_form.html -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; UTF-8" />
<title>sample</title>
</head>
<body>
メールを送信します<br>
<!-- send.phpにPOSTします -->
<form action="send.php" method="post">
宛先メール:<input type="TEXT" name="to" id="to" placeholder="メールアドレス" ><br>
<br>
件名:<input type="TEXT" name="subject" id="subject" Placeholder="件名"><br>
<br>
本文<br>
<textarea name="message01" id="message01" cols="40" rows="10" placeholder="本文"></textarea>
<br>
<input type="submit" value="送信" />
</form>
</body>
</html>

```

##送信部分を作成
肝心のPHPMailer送信部分を作成します。
ここでもソースが…とかいわない
ソース内のコメントに各パラメーターとか書いときました。

```
<?php

mb_language("japanese");
mb_internal_encoding("UTF-8");

//ソースを全部読み込ませる
//パスは自分がPHPMailerをインストールした場所で
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/POP3.php';
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/OAuth.php';
require 'PHPMailer/language/phpmailer.lang-ja.php';

//公式通り
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

//autoloderはcomposerでのインストールじゃないとないので
//あえて記述しません。

//SMTPの設定
$mailer = new PHPMailer();//インスタンス生成
$mailer->IsSMTP();//SMTPを作成
$mailer->Host = 'smtp.gmail.com';//Gmailを使うのでメールの環境に合わせてね
$mailer->CharSet = 'utf-8';//文字セットこれでOK
$mailer->SMTPAuth = TRUE;//SMTP認証を有効にする
$mailer->Username = '*********@gmail.com'; // Gmailのユーザー名
$mailer->Password = 'パスワードだよ！'; // Gmailのパスワード
$mailer->SMTPSecure = 'tls';//SSLも使えると公式で言ってます
$mailer->Port = 587;//tlsは587でOK
$mailer->SMTPDebug = 2;//2は詳細デバッグ1は簡易デバッグ本番はコメントアウトして

//メール本体
$message="フォームで送ったよ!"."\n".$_POST['message01'];//メール本文
$mailer->From     = '******@gmail.com'; //差出人の設定
$mailer->FromName = mb_convert_encoding("表示名だよ","UTF-8","AUTO");//表示名おまじない付…
$mailer->Subject  = mb_convert_encoding($_POST['subject'],"UTF-8","AUTO");//件名の設定
$mailer->Body     = mb_convert_encoding($message,"UTF-8","AUTO");//メッセージ本体
$mailer->AddAddress($_POST['to']); // To宛先

//送信する
if($mailer->Send()){}
else{
	echo "送信に失敗しました" . $mailer->ErrorInfo;
}

?>
```
##SSLで怒られる
SSL系のエラーが出る場合はPHP.iniとApacheの設定を見直してみてください。
ソースの記述ミスの可能性は低い類のエラーです。
エラーをググってみて、近しい所を修正してみてください。

##SMTP connect() failed.で怒られる
ここまでくるとソースはほぼOKだと思います。
文字通りSMTPの接続に失敗しているので、Gmailだとセキュリティーがかかっている可能性大です。

安全性の低いアプリを解除してみてください。
![gm_sec.JPG](https://qiita-image-store.s3.amazonaws.com/0/260102/ae7b06d1-b729-6adc-42f6-a8fc0c0c0c4e.jpeg)

[安全性の低いアプリ](https://www.google.com/settings/security/lesssecureapps)

##Gmailの仕様？PHPMailerの仕様？
それでもなかなか送信できないでSMTP connect() failedで怒られ続ける。。。
泣かないでください、なぜかわかりませんが**しばらく放置**すると接続できるようになったりします。

キャッシュのクリアや再起動やら色々試したのですが、2~3時間放置したら接続できるようになりました。

Gmailの許可に時間がかかっているのか、SMTPにアクセスしすぎたのか、原因はわかりません。
それでもダメなら、PHPMailerをあきらめるか、踏台を変えた方がよいかもしれません。

##あとがき
ハマるときはハマっちゃいますので、デバッグしながらエラーを取っていくのが一番です。
Connectのエラーだけはどうにもなりません。頑張ってください。

この記事で涙を拭ける人が増えることを祈ります。