0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-17

【独自ドメイン】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レコードを表示」のボタンが押せるのでコピーしてメモ帳へ。

Conoha1.jpg

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

Conoha2.jpg

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

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

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

以上

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?