赤の意味
このチュートリアルでは、ユーザーが入力またはカスタマイズする必要のある行は赤になります。
残りはほとんどコピーアンドパスタブルである必要があります。
PHPについてmail()
PHP mail()関数は、sendmail_path構成ディレクティブのプログラムを使用して電子メールを送信します。 これはデフォルトでsendmailとして設定されています。
ほとんどのLinuxインストールにはsendmailがプリインストールされていますが、PHPスクリプトによって送信された電子メールにスパムのフラグが付けられないようにするために、SPF / PTRレコードの設定、DKIMキーの生成などの面倒な作業が常にあります。 MSMTPと呼ばれるSMTPクライアントは、サードパーティのSMTPサーバーを使用して電子メールを送信するために使用できます。これは、sendmailの代わりにPHPのmail()でも使用できます。
インストール
Fedora LinuxにMSMTPをインストールするには、yumを使用します。
yum install msmtp
CentOSリポジトリにはMSMTP用のRPMパッケージがないため、ソースからインストールする必要があります。
yum install make gcc pkgconfig wget http://sourceforge.net/projects/msmtp/files/msmtp/1. tar -xvf msmtp-1.4.31.tar.bz2 cd msmtp-1.4.31 ./configure make make install4.31/msmtp-1.4.31.tar.bz2/ download
この記事の執筆時点での最新バージョンは1.4.31ですが、将来変更される可能性があるため、このsourceforgeページにアクセスしてください。
Ubuntu / Debianディストリビューションでは、apt-getを使用します。
apt-get install msmtp
Arch Linuxユーザー:
sudo pacman -S msmtp
MSMTPの構成
MSMTPの構成ファイルは、ユーザーごとに〜/ .msmtprc に保存され、 / etc /msmtprcはシステム全体の構成ファイルです。 ディレクトリ内の構成ファイルを開きます。
vi ~/.msmtprc
Yahooアカウントに次の行を追加します。
account yahoo tls on tls_starttls off tls_certcheck off auth on host smtp.mail.yahoo.com user user1 from user1@yahoo.com password yourYahooPa5sw0rd
Gmailの場合は、次の設定を使用します。
account gmail tls on tls_certcheck off auth on host smtp.gmail.com port 587 user user1@gmail.com from user1@gmail.com password yourgmailPassw0rd
このファイルには複数のアカウントを含めることもできます。“account”の値がセクションごとに一意であることを確認してください。 ファイルを保存し、 chmod を使用して、このファイルにはパスワードが含まれているため、所有者だけが読み取れるようにします。 アクセス許可が600を超えると、msmtpが実行されないため、この手順は必須です。
chmod 600 ~/.msmtprc
これをPHPで実装する前に、コマンドラインからチェックして、正しく機能することを確認してください。 これを行うには、簡単な電子メールを含むプレーンテキストファイルを作成します。
echo -e "From: alice@example.com \n\ To: bob@domain.com \n\ Subject: Hello World \n\ \n\ This email was sent using MSMTP via Gmail/Yahoo." >> sample_email.txt
次に、このメールを送信します。
cat sample_email.txt | msmtp --debug -a gmail bob@domain.com
「gmail」という単語を「yahoo」または「アカウント」オプションに入力したものに置き換えます。 “-debug” パラメータが原因で、多くのメッセージが表示されます。 これは、物事が期待どおりに機能しない場合のトラブルシューティングを容易にするためです。 bob@domain.comがこのメールを受信した場合、すべてが正しく設定されているため、このファイルを /etcディレクトリにコピーします。
cp -p ~/.msmtprc /etc/.msmtp_php
所有権を、Webサーバーが実行されているユーザー名に変更します。 これは、インストールされているVPSおよびWebサーバー上のLinuxディストリビューションに応じて、「 apache 」、「 www-data 」、または「nobody」になります。
chown www-data:www-data /etc/.msmtp_php
PHPの構成
php.ini ファイルを開きます。その場所は、インストールされているOSとPHPの種類(PHP CGI、mod_php、PHP-FPMなど)によって異なります。
vi /etc/php5/php.ini
次の行を見つけます。
sendmail_path =
msmtpコマンドにパスを追加して変更します。
sendmail_path = "/usr/bin/msmtp -C /etc/.msmtp_php --logfile /var/log/msmtp.log -a gmail -t"
ログファイルを手動で作成し、その所有権をWebサーバーが実行しているユーザー名に変更します。
touch /var/log/msmtp.log chown www-data:www-data /var/log/msmtp.log
Webサーバーを再起動して、変更を適用します。
service httpd restart
Arch Linuxでは、これはsystemctlコマンドを使用して行われます。
systemctl restart httpd
OSとWebサーバーに応じて、「httpd」を適切な名前に置き換えます。 PHPが別のプロセス(PHP-FPMなど)として実行されている場合は、代わりに再起動します。
service php5-fpm restart
この設定をテストするには、単純なmail()を使用してPHPスクリプトを作成します。
<?php if(mail("receipient@domain.com","A Subject Here","Hi there,\nThis email was sent using PHP's mail function.")) print "Email successfully sent"; else print "An error occured"; ?>
Webブラウザからこのファイルにアクセスします。
http://www.example.com/file.php
この電子メールが送信されなかった場合は、msmtpログファイルでエラーを確認できます。
tail /var/log/msmtp.log
一般的なエラー
PHPスクリプトを使用しているときに電子メールが送信されなかった場合は、次のようにトラブルシューティングします。
- 正しいphp.iniファイルを編集したかどうかを確認してください。 これは、 phpinfo(); ファイルを作成し、[ロードされた構成ファイル]セクションを確認することで確認できます。
- msmtp構成ファイルへのパスが間違っているか、Webサーバーにこのファイルを読み取る権限がない可能性があります。
- コマンドラインPHPを使用してスクリプトを実行し、電子メールが送信されているかどうかを確認します。
php /var/www/html/file.php