の意味

このチュートリアルでは、ユーザーが入力またはカスタマイズする必要のある行はになります。

残りはほとんどコピーアンドパスタブルである必要があります。

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.4.31/msmtp-1.4.31.tar.bz2/download
tar -xvf msmtp-1.4.31.tar.bz2
cd msmtp-1.4.31
./configure
make
make install

この記事の執筆時点での最新バージョンは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 [email protected]
password yourYahooPa5sw0rd

Gmailの場合は、次の設定を使用します。

account gmail
tls on
tls_certcheck off
auth on
host smtp.gmail.com
port 587
user [email protected]
from [email protected]
password yourgmailPassw0rd

このファイルには複数のアカウントを含めることもできます。“account”の値がセクションごとに一意であることを確認してください。 ファイルを保存し、 chmod を使用して、このファイルにはパスワードが含まれているため、所有者だけが読み取れるようにします。 権限が600を超える場合、msmtpは’実行されないため、この手順は必須です。

chmod 600 ~/.msmtprc

これをPHPで実装する前に、コマンドラインからチェックして、正しく機能することを確認してください。 これを行うには、簡単な電子メールを含むプレーンテキストファイルを作成します。

echo -e "From: [email protected] \n\
To: [email protected] \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 [email protected]

「gmail」という単語を「yahoo」または「アカウント」オプションに入力したものに置き換えます。 “-debug” パラメータが原因で、’に多くのメッセージが表示されます。 これは、物事が期待どおりに機能しない場合のトラブルシューティングを容易にするためです。 [email protected]がこのメールを受信した場合、すべてが正しく設定されているため、このファイルを /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("[email protected]","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