【独自ドメイン】2個を使い Conoha VPS で「テスト環境」と「本番環境」を構築した。
1.Conoha VPS サーバにUbuntu 20.04(64bit)をテスト環境用として1台目をインストール
2.Postfixをインストール&設定
3.WebページのPHPからSMTPで「会員登録用8桁の番号を送信する」というプログラムを作成
4.テスト用のサーバでは問題無く、自分のGmailへ送信出来た
しかし、2台目のConoha VPS 本番環境用のサーバはテスト環境と同じ手順で構築したのに、同じコードでPHPからSMTPで送信すると、今度は自分のGmailへ送信が出来ない。
「何故だろう?」
さすがに、Linux全般に対し「(ど)素人」なのでこれには困った。
たまたま、Conoha WING で独自ドメイン(3個目)を1個契約していたので、管理画面を見ていると、メールサーバを追加で契約していたので、DNSのMX設定には追加契約した別のサーバ名が書いてあった。
「確か、Conoha VPS も 10GBのメールサーバが契約出来るな」と思い出し
それならConoha VPS からメールサーバも追加で契約し、そのメールサーバ経由で「会員登録用のメール」を送信出来ないか? と考えた。
そこで Conoha VPS のコントロールパネルから、メールサーバを1個契約した。
契約内容:550円/月 SSD 10GB
■メールサーバー(アプリケーションサーバー)を使う
早速、自分のGmail宛てに送信出来なかった、本番環境用独自ドメインのメール送信用アカウントを1個作成し、スマホのメールアプリで、作成したアカウントの送受信設定を、結構な時間をかけてやっと完了した。
■送信設定は「465」ポートを使うと上手く行った(が「証明書」は使わずで接続した)
あとは、本番環境用のPHPMailの送信設定をスマホのアプリと同じにしたのだが、これが上手くいかない。
「何故だろう?」
金曜の夜から色々試したりして、土曜日も1日かかり上手くいかず、日曜日の朝に
「そうだ!PHPMail本家のHPを見てみよう」
と思い以下の英語ページをみつけた。
日本語に翻訳して見てみたら以下の記述があった。
■この方法はおススメしない設定■だと書いてあるようだ
以下の7行をPHPの送信コードの先頭に追加したら、「465」ポートから送信が出来た!
$mail->SMTPOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
]
];
【感謝】「端くれエンジニアの備忘録」さんの以下の記事を参考にさせていただきました
https://weblog.socialblue.biz/?s=SMTP%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%83%A1%E3%83%BC%E3%83%AB%E9%80%81%E4%BF%A1%E3%80%82PHPMailer+6%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%80%82
<?php
$to = '送信先メールアドレス';
$from = 'info@foo.info';
$subject = "認証コードをお送りいたします";
$message = "認証コードをお送りいたします\r\n" . '123456' . "\r\n以上";
$headers = "From: {$from}";
//SSL認証(465)
SEND_PHPMAIL($to,$subject, $message,$from);
?>
<?php
///////////////////////////////
/// 認証用確認コード送信
///////////////////////////////
function SEND_PHPMAIL($to,$subject, $message,$from){
$mail = new PHPMailer(true); // Passing `true` enables exceptions
///////////////////////////////
/// これを追加した ※非推奨
///////////////////////////////
$mail->SMTPOptions = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
]
];
///////////////////////////////
try {
//Server settings
//$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'SMTP Server Name';
// Specify main and backup SMTP servers
$mail->SMTPAuth = true;
// Enable SMTP authentication
$mail->CharSet = 'utf-8';
//文字セットこれでOK
$mail->Username = $from; // SMTP username
$mail->Password = 'SMTP password'; // SMTP password
$mail->SMTPSecure = 'ssl';
// Enable TLS encryption, `ssl` also accepted
$mail->Port = 465;
// TCP port to connect to (ssl:465)
//Recipients
$mail->setFrom($from, '登録用認証コード送信');
//$mail->addAddress($to,'宛先名'); // Add a recipient
$mail->addAddress($to); // Name is optional
$mail->addReplyTo($from, 'Information');
//エラーとして戻ってくる先
//$mail->addCC('cc@***.net');
$mail->addBCC($from);
//Attachments
// $mail->addAttachment('/var/tmp/file.tar.gz');
// 添付ファイルのパス
// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');
// 添付ファイルのパスとその名称
//Content
$mail->isHTML(false);
// HTMLメールのときは「true」、textメールのときは「false」
$mail->Subject = mb_convert_encoding($subject, "UTF-8", "AUTO");
// $mail->Body = '<html>日本語本文</html>'; //htmlメール
// $mail->AltBody = '日本語本文'; //htmlメール
$mail->Body = $message; //textメール
$mail->send();
//echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
return 'OK';
}
?>
Conoha VPS では独自ドメインを2個契約しているので、本番環境用サーバから追加契約したメールサーバにSMTP送信が可能になったので、今度はテスト環境用の独自ドメインのメールも登録したら使えた。
■1個の Conoha VPS mailserver で、2個の独自ドメインのメールアカウントが作成出来たので「これはお得で便利」だと思った。
追加設定
メールサーバのコントロールパネル画面で「DKIM設定」を「有効」にし
暫く待つと「DNSレコードを表示」のボタンが押せるのでコピーしてメモ帳へ。
■DNSに「DKIM設定」を追加
表示された「TXTレコード」をDNS情報にTXTとして追記した。
【最後に】
Linuxサーバの設定やPHP,MySqlなどを勉強中なので、この運用方法、設定が正しいのかどうかは不明です。
実際に設定している独自ドメイン2個も勉強の為で、一般公開もしていないので大きな問題は無いのですが、何かアドバイスがあればお願いいたします。
Conoha VPS で独自ドメインを構築する時、メールサービスだけ Conoha VPSの「メールサーバー」を使うと便利だなと思いました。
以上