【LAMP環境】PHPでメール送信を行う方法【Postfix】

コンピュータ関連
この記事は約7分で読めます。

2021.11.3 

とうとう来たなこの時が・・・

再び開けるプログラマーの扉

の流れの話で、前記事(Webシステム実行環境、開発環境作成)の外伝的な話です。

前記事は下記からご参照ください。 

実行環境開発環境が整いWebシステムの開発が進んできましたが、「自動メール送信機能が欲しい」という要望が出てきました。

そこで今回は、メール送信機能のひとつである、Postfixインストール、及び設定方法のメモも兼ねて紹介を行います。

実行環境がLAMP環境開発環境がXAMPP環境と分かれておりますので、それぞれ設定方法を紹介していきます。

※正確にはXAMPPはPostfixを使ってないです

(全行程の所要時間:60分程度)

0.構築環境

■実行環境

・さくらVPNメモリ:1GB、CPU:2コア、SSD:100GB)

LinuxOS:Ubuntu18.04

Apache:2.4

MySQL:5.7

PHP:7.2

■開発環境

Windows10メモリ:8GB、CPU:2コア、SSD:256GB)

XAMPP:3.3.0

※各環境の詳細は下記過去記事を参照ください。

1.XAMPP環境

 正確にはPostfixではなく、XAMPPインストール時に付属されている”メール送受信機能を活性化させる”流れになります。

①XAMPPコントロールパネルから「php.ini」ファイルを開く

 Apache列の[Config]ボタンより、「PHP(php.ini)」を選択します。

②「php.ini」ファイルの編集

 ①の操作で、下記ファイルが開きます。

約1106行付近の[mail function]内にある赤枠下段の記載を追記します。

ノーマル状態だと「;sendmail_path = 」となっており「;」でコメントアウトされています。

このコメントアウトを外し、「=」の後にメール機能を行うアプリケーションが保存されているパスを、次のオプション付きパス「“”C:\xampp\sendmail\sendmail.exe” -t”」と記入します。

※「sendmail.exe」のパスはインストールの仕方で変わるため、各人で確認してください。

③「sendmail.exe」格納場所にある「sendmail.ini」ファイルを開く

 「sendmail.exe」と同じ場所にある「sendmail.ini」ファイルを、メモ帳などで開きます。

④「sendmail.ini」ファイルの編集

 編集箇所は、メール送信のみであれば次の3ヶ所です。

②と同様、該当の設定のコメント「;」を外し、設定を入れていきます。

ⅰ.「smtp_server=」→メールサーバを指定します。

 例)G-mailなら「smtp.gmail.com」になりますが、G-mail側で2段階認証機能をオンにしているとメール送信できない点に注意です。不明なアクティビティが検出され、アクセスがブロックされました。。。

ⅱ.「;smtp_port=25」→「smtp_port=587」

※コメントアウトするだけでいいと思いますが、大抵のSMTPサーバがポート587からの応答に応えていると思われるためこの設定に。G-mailの場合はポート587。

ⅲ.「;auth_username= ;auth_password=」→自身のアカウントとパスワード

 例)G-mailなら、自分のメールアカウントがusername、ログイン時のパスワードがpasswordになります。ⅰ同様、2段階認証に注意です。

⑤PHPからテスト送信

 PHPのシステム側から「mb_send_mail($to, $subject, $message, $headers);」関数を使って送信してみましょう。

対象へ送信できていれば完了です。

※$to→送信対象メールアドレス文字列(例:”test@aaa.com”)

 $subject→件名文字列(例:”test”)

 $message→本文文字列(例:”test”)

 $headers→送信者、CCなどを含むヘッダ文字列(例:”From: send@bbb.com”)

 例)”From: send@bbb.com” から、”test@aaa.com”へ、件名”test”、本文”test”、としてメールが送信されます。

次はLAMP環境での導入方法、及び設定方法について説明していきます。

2.LAMP環境

 自分のサーバーからメールを送信するだけであれば、次のPostfixのインストールと、インストール中の設定のみでメール送信機能が利用可能となります。

①以下コマンドでメール送信用ポート587を開けます。

sudo ufw allow 587

 本当に開いたか気になる方は、次のコマンドで解放ポートを確認を行うと良いでしょう。

sudo ufw status

②さくらVPS側でも、587番ポート(または「メール用ポート」)を開けます。

 「パケットフィルタを設定」というところから設定する流れです。

※メール設定はデフォルトで「全て許可」状態です。もし何らかの設定で外していればこれらを許可してあげてください。

③以下コマンドで「Postfix」をインストールします。

※「Webmin」などからもコマンドを飛ばせますが、「Postfix」は確認画面が伴うため、なるべくリモート等でコンソールを直接触ってください。フリーズします。。。

sudo apt-get install postfix

すると、下記画面が出ます。

この前に、何かを確認する画面が出たり出なかったりします。その際は、[Tab]でカーソルを<OK>に合わせて[Enter]押下してください。

現実行環境は実際にネット上にあり、ドメインも取得してあるため、「Internet Site」に[Tab]でカーソルを持ってきて[Enter]押下し、選択します。

次に、以下の画面が出ます。

メールサーバーの名前を入力する感じです。

初期値は現サーバのサーバ名になっていますが、ドメイン取得している場合は取得したドメインをピンク帯に上書きしてあげます。

入力が終わったら、[tab]でカーソルを<OK>に移動させ、[Enter]押下で選択。

この先もあったりなかったりするらしいですが、自分はここで設定が完了しました。

おそらくメールに関する何らかの設定を先に入れていると、細かく聞いてくるのかと思われます。

④PHPから送信テスト。

 手順1の⑤同様、「mb_send_mail($to, $subject, $message, $headers);」関数を使って、メール送信テストを行います。

外部からホスト名、またはドメイン名が認識できれば特に問題なく送信できるはず。

後は実際にプログラムに組み込んでいくだけですね。

3.おまけ:日本語文をmb_send_mail()で送る

 実は単純に「mb_send_mail($to, $subject, $message, $headers);」関数を使うだけじゃ日本語を送れないんですよね。

 次のように記載することで、日本語文が送れるようになります。

$headers = "Mime-Version: 1.0\n";  //ヘッダにMimeを指定(現状はこれ)
$headers = $headers."Content-Type: text/plain; charset=UTF-8\n";  //ヘッダにコンテンツのタイプと文字コードを設定
$headers = $headers."From: test@test.com";  //ヘッダに送信元を設定
mb_language("Uni"); //mbstring関数で言語の設定(何故かJapanieseで日本語しなかった)
mb_internal_encoding("UTF-8");  //mbstring関数でエンコード
mb_send_mail($to, $subject, $message, $headers);  //各引数を関数に渡し、送信処理

4.最後に

メール送信機能の追加が完了しました。

他にもあーしたいこーしたいという要望をWebシステムに昇華していく中で苦戦した内容などを、忘れないためにもこのブログにメモしていくつもりなので、気になったらご参照ください。

以上。 

(不明点あればコメント頂ければ、可能な限りお答えします。)

プロフィール
当ブログ管理者
shibatty

SIer→CE兼プログラマー。
趣味:ダム巡り、車、バイク、おキャンプ。
愛車:YAMAHA セロー250、Kawasaki Ninja250R。
実績:BikeJIN2018ラリー完走。 2017,18,19,21年SSTR完走。 日本一周ダムカード収集ラリー完走(2018.5.26~11/20)。

shibattyをフォローする
PHPコンピュータ関連
シェアする
shibattyをフォローする
脱サラ日記

コメント

タイトルとURLをコピーしました