Conoha VPS サーバにUbuntu 20.04(64bit)をインストールしPHPmailからConoha VPS mailserver経由でメールを送信したメモ

【独自ドメイン】２個を使い Conoha VPS で「テスト環境」と「本番環境」を構築した。

１．Conoha VPS サーバにUbuntu 20.04(64bit)をテスト環境用として１台目をインストール
２．Postfixをインストール＆設定
３．WebページのPHPからSMTPで「会員登録用8桁の番号を送信する」というプログラムを作成
４．テスト用のサーバでは問題無く、自分のGmailへ送信出来た

しかし、２台目のConoha VPS 本番環境用のサーバはテスト環境と同じ手順で構築したのに、同じコードでPHPからSMTPで送信すると、今度は自分のGmailへ送信が出来ない。

「何故だろう？」

さすがに、Linux全般に対し「（ど）素人」なのでこれには困った。

たまたま、Conoha WING で独自ドメイン（３個目）を１個契約していたので、管理画面を見ていると、メールサーバを追加で契約していたので、DNSのMX設定には追加契約した別のサーバ名が書いてあった。

「確か、Conoha VPS も 10GBのメールサーバが契約出来るな」と思い出し
それならConoha VPS からメールサーバも追加で契約し、そのメールサーバ経由で「会員登録用のメール」を送信出来ないか？　と考えた。

そこで　Conoha VPS のコントロールパネルから、メールサーバを１個契約した。
契約内容：550円／月　SSD　10GB

■メールサーバー（アプリケーションサーバー）を使う

https://support.conoha.jp/v/mailserver/

早速、自分のGmail宛てに送信出来なかった、本番環境用独自ドメインのメール送信用アカウントを１個作成し、スマホのメールアプリで、作成したアカウントの送受信設定を、結構な時間をかけてやっと完了した。

■送信設定は「465」ポートを使うと上手く行った（が「証明書」は使わずで接続した）

あとは、本番環境用のPHPMailの送信設定をスマホのアプリと同じにしたのだが、これが上手くいかない。

「何故だろう？」

金曜の夜から色々試したりして、土曜日も１日かかり上手くいかず、日曜日の朝に

「そうだ！PHPMail本家のHPを見てみよう」

と思い以下の英語ページをみつけた。

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

日本語に翻訳して見てみたら以下の記述があった。
■この方法はおススメしない設定■だと書いてあるようだ
以下の７行を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 では独自ドメインを２個契約しているので、本番環境用サーバから追加契約したメールサーバにSMTP送信が可能になったので、今度はテスト環境用の独自ドメインのメールも登録したら使えた。
■１個の Conoha VPS mailserver で、２個の独自ドメインのメールアカウントが作成出来たので「これはお得で便利」だと思った。

追加設定
メールサーバのコントロールパネル画面で「DKIM設定」を「有効」にし
暫く待つと「DNSレコードを表示」のボタンが押せるのでコピーしてメモ帳へ。

![Conoha1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434640/d3080052-b45b-142e-cc96-9fa77c79a2d1.jpeg)

■DNSに「DKIM設定」を追加
　表示された「TXTレコード」をDNS情報にTXTとして追記した。

![Conoha2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/434640/ad2d7d0c-5356-ea3b-bee8-6e9c1ad76256.jpeg)

【最後に】
Linuxサーバの設定やPHP,MySqlなどを勉強中なので、この運用方法、設定が正しいのかどうかは不明です。
実際に設定している独自ドメイン２個も勉強の為で、一般公開もしていないので大きな問題は無いのですが、何かアドバイスがあればお願いいたします。

Conoha VPS で独自ドメインを構築する時、メールサービスだけ　Conoha VPSの「メールサーバー」を使うと便利だなと思いました。

筆者HP:https://kuhen.org/ndb/

以上