- 投稿日:2021-01-29T21:31:14+09:00
【macOS×XAMPP】sendmail.iniなんてないけど、どうやってPHPでメール送るの??(Gmail経由)
環境
OS → macOS Big Sur ver 11.1
サーバ/DB → XAMPP 7.4.13-0
エディタ → Visual Studio Code
メール → Gmailターゲット(この記事を読むべき人)
- PHPを用いてローカル環境からメールを送りたいけど、送れずに悩んでいる人
- sendmailというメールエージェントが見当たらず先に進めない人
- macOSの記事が少なく自分に合う情報が見つからず困っている人
ペルソナは私と同じような初学者向けの記事となっているので、現役のエンジニアの方々は「こんなところでお前つまづいたのか」と笑いながら読み進めていただければ...
自分が陥った状況
ローカル環境にあるPHPアプリケーションからメールを自分のGmailに飛ばそうとした結果、飛ばせない。
メールの飛ばし方をググるとたくさん記事が出てくる。
参照してみると、まずphp.iniをいじってポート番号や宛先を変える。その後どうやらsendmail.phpというファイルをいじるとのこと。しかし、このsendmail.iniがどうやらmacOS上を漁っても出てこない...
そこからsendmailの設定ファイルであるsendmail.iniの実態を掴むまで数日かかり苦労した。sendmail.iniはmacOSのどこにある?
結論から申すと、
sendmailはmacOSにはない。もう少し調べてみると、どうやら違うメールサーバがmacには標準搭載されているらしい。
その名前は、「postfix」である。そもそもメールサーバってなんぞや
sendmailやpostfixの実態を掴むためにまずはメール送信の仕組みについて話していく。
メールの送受信というものは、SMTPとPOP(IMOP)というプロトコルを用いて行われる通信のことである。
プロトコルというのは、通信の手段を明確に定めた規格である。
サーバとクライアントでお互い扱うデータの種類や通信の手法をあらかじめ統一しておくためのルールみたいなもの。
メールでのやりとりをするときは常にsmtpやpop.imopが使われている。引用元: 【図解】初心者にも分かるメールの仕組み~SMTP/POP/IMAPの違い, リレーの構成, 用語について~
MTA(Mail Transfer Agent)
メールを配送するためのプログラムで、ホスト間でのメールの配送や配送されてきたメールを受け取る機能をもっています。代表的なMTPは、sendmail,qmail,Postfixなどがあります。MDA(Mail Delivery Agent)
MTAがメールを受け取ると、各ユーザのメールボックスにメールを配信する機能を持っています。代表的なMDAは、mail.local,procmail,qmail-localなどがあります。MUA(Mail User Agent)
主にユーザがメールを読み書きし、送受信する機能を持っています。メーラーとも言われ、アドレス帳やメールの振り分け機能を持っているアプリケーションが多く存在ます。また、インターネットメールの仕様に合わせたコード変換などを自動的に行います。代表的なMDAは、Becky!,Outlook Express,Eudora,Muleなどがあります。引用元: SMTP配送の仕組みとsendmail
厳密にいうと、メールサーバ内にあるMTAがsendmailやpostfixである。
phpを動かすapacheサーバにメール配送機能があるのではなく、メールサーバ内にあるエージェントが相手のメールサーバに配送しているという認識だけ頭に入れて欲しい。今回は
postfix → gmailサーバ → 相手のメールサーバ
というgmail経由でのリレー転送方法を解説していく。転送方法
postfixの役割とメール送信の流れについて把握したところで、以下のアクションプランを提示する。今回はローカル環境での送信テストなので、必要最小限の手順のみ紹介。
- php.iniを編集しpostfixに対してコネクションをとる
- postfixの設定ファイルを開き宛先を記述する
- saslの設定
前提条件
ファイル編集はvimというエディタで行う。
vimの使い方がわからない人は、こちらの記事で基礎動作を把握しておいてほしい。
https://qiita.com/okamos/items/c97970ab34ff55ff31671 php.iniを編集する
この部分を編集。smtpのポート番号とホストを設定。
[mail function] ; For Win32 only. ; http://php.net/smtp SMTP=localhost /* ← ここをlocalhostに */ ; http://php.net/smtp-port smtp_port=25 /* ←ここを25に */2 postfixの設定
ここからはpostfixをいじる。
まずターミナルを使いpostfixディレクトリに移動。パスは以下の通りcd /etc/postfix/root権限を用いてmain.cfをvimで開く
sudo vi main.cfmain.cfにて以下の場所を探す
#relayhost = $mydomain #relayhost = [gateway.my.domain] #relayhost = [mailserver.isp.tld] #relayhost = uucphost #relayhost = [an.ip.add.ress]直下にrelayhostの宛先と設定を記述し保存( :wq )
relayhost=[smtp.gmail.com]:587 smtp_sasl_auth_enable=yes smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd smtp_use_tls=yes smtp_tls_security_level=encrypt tls_random_source=dev:/dev/urandom smtp_sasl_security_options = noanonymous smtp_always_send_ehlo = yes smtp_sasl_mechanism_filter = plainrelayhostに今回gmailを使うので、gmailのポート番号を使用する。
gmailをsmtpリレーとして使うためのポート番号の調べ方saslというライブラリを使うためにその情報も記述している。
saslは、異なるプラットフォームのユーザ認証を手助けするライブラリ。
アプリケーション毎にリレーサーバに対してのアクセス方法が変わってきてしまうため、saslを用いてユーザ認証を共通化している。3 saslの設定
saslのユーザ認証方法の流れ
gmail認証するためのパスワードを格納したファイルを作成 ↓ ファイルのパーミッションを設定 ↓ ファイルをDB化するまずはgmail認証データをpostfixディレクトリ内にsasl_passwdというファイル名で作成。
(ここのファイル名は、main.cfに追記したsmtp_sasl_password_mapsのファイル名と一致させる)sudo vi sasl_passwdsasl_passwdには以下のフォーマットで必要な情報を記述
[smtp.gmail.com]:587 GMAILメールアドレス:パスワード保存したら、sasl_passwdファイルのパーミッションを指定
sudo chmod go-rx sasl_passwd最後にsasl_passwdをハッシュマップ データベースファイル化する。
sudo postmap hash:/etc/postfix/sasl_passwdこれでsaslの設定は終了。
最後にpostfixを起動、または再起動させます。起動 sudo postfix start 再起動 sudo postfix reloadまとめ
macOSに関する情報がwindowsに比べて少なかったので、自分がローカル環境でメールを送信できた手法を紹介した。
「phpで簡単にメールを送れる」という情報をよく目にするが、根底にあるLinuxなどOSに関する知識やプロトコルを理解していないとテスト環境の構築は難しいと感じた。
- 投稿日:2021-01-29T18:56:49+09:00
小技の寄せあつめ
これは、何?
Mac、Raspberry Piを使うなかで、ちょっと便利だと思った小技を寄せあつめたものです。
都度、書き足します。Mac編
zshの関数を利用してpyuic5の入力を楽にする(2021.2.2追加)
最近Qt Designerをよく使うのでpyuic5を頻繁に使用している。
そのたびに% pyuic5 hogehoge.ui -o hogehoge.py
とするのが面倒になったので.zshrcにfunctionとして登録しました。
設定は、以下の内容を.zshrcに追加するだけです。関数名(コマンド名)は、ui2pyにしました。
同じ名前でも、.zshrcの設定が先に呼ばれるので問題ありません。function ui2py(){ pyuic5 $1 -o $1:r.py }使う前には、
% source ~/.zshrc
してください。
使い方(必要ないと思いますが、念のため)は以下のとおりです。% ui2py hogehoge.uisshでログインする際に、ログイン先のディレクトリを変更(2021.1.31追加)
% ssh -X raspi4 -t "cd /home/pi/share; bash --login"sshログイン時に、タイムアウトを防止(2021.1.31追加)
~/.ssh/configに、以下を追加。
ServerAliveInterval 30Raspberry Pi編
- 投稿日:2021-01-29T17:08:04+09:00
【Mac】Nodeインストール手順の備忘録
はじめに
- Mac環境上で、Nodeの開発環境を構築する機会があったので、その備忘録です。
- Nodeの管理ツールとして、nodebrewを使用しました。
Homebrewのインストール
zsh# スクリプト実行 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" # ログ ==> This script will install: /usr/local/bin/brew /usr/local/share/doc/homebrew # ログイン時のPasswordを入力 Password: ==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/bin ︙ Already up-to-date. ==> Installation successful! # インストール確認 brew --version # ログ Homebrew 2.7.7nodebrewのインストール
zsh# インストール実行 brew install nodebrew # Shellの確認 echo $SHELL # → /bin/zsh # .zshrcが無い場合、作成 touch .zshrc # ~/.zshrcにnodebrewのPATHを追記 % echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.zshrc # ファイル読み込み source ~/.zshrc # インストール確認 nodebrew # → nodebrew 1.0.1 # セットアップ実行 nodebrew setupNode.jsのインストール
- インストール可能なバージョンを確認します。
zsh# インストール可能なバージョンを表示 nodebrew ls-remote # → v0.0.1 v0.0.2 ~ # → v15.0.0 v15.1.0 ~ # → io@v1.0.0 io@v2.0.0 ~
- バージョンを指定して、インストールします。
zsh# v12.20.1をインストール nodebrew install v12.20.1
- インストール済みバージョンを確認します。
zshnodebrew list # → v12.20.1
- インストール済みバージョンを有効にします。
zshnodebrew use v12.20.1 node -v # → v12.20.1
- 別バージョンをインストールして、切り替えます。
zsh# v14.15.3をインストール nodebrew install v14.15.3 # インストール済みバージョンを表示 nodebrew list # → v12.20.1 # → v14.15.3 # v14.15.3を有効化 nodebrew use v14.15.3 node -v # → v14.15.3
- 投稿日:2021-01-29T11:25:48+09:00
library not found for -lSystem
library not found for -lSystem
MacOS Big Sur 11.1にアップデートをした。
g++でコンパイルすると以下のエラーが発生した。(この時VScode上では、bits/stdc++.hのincludeエラーが出ていた)ld: library not found for -lSystem collect2: error: ld returned 1 exit status解決法
brew upgrade gcc再インストールでも大丈夫っぽい。
ちなみにこのサイトに載っていた以下の方法を先に試したが何も起きなかった。export LIBRARY_PATH="$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib"
- 投稿日:2021-01-29T00:02:55+09:00
Homebrewでデスクトップアプリを一気にインストールする方法
成果物
前提
- Homebrewがインストールされている
手順
- インストールしたいアプリを検索
brew search google-chrome --cask
- インストールしたいアプリのリストを作成
- 検索して見つかったアプリの名前を列挙していきます。
- ここでは試しに「cask_formula.txt」というファイルを作成して、以下のように追記します。
- 実際に動かす際は取捨選択してください。
docker google-chrome insomnia insomnia-designer iterm2 jetbrains-toolbox middleclick slack tableplus visual-studio-code
- インストールの実行
- 「cask_formula.txt」が置いてあるディレクトリで以下コマンドを実行
xargs brew cask install < cask_formula.txt備考
- 「cask」を外せばcuiでも同じことができます。
- 新しく人が入った際にPCを爆速でセットアップできるように社内でgitを使って「cask_formula.txt」を管理しておくといいかもしれません。
- 上述の成果物をcloneして使い回すのがおすすめです。