管理ツールの一部で、更新されるたびに通知メールを送信する機能を持たせているのですが、サーバをお引越ししてからというもの、メールが届かなくて不思議に思っていました。
そう、エラーログを全く確認していなかったという、やってはいけないミス。ほぼ自分にしか影響しないツールで良かった~。
さて、気を取り直してエラーログを確認してみたところ、
PHP Warning: require_once(Mail.php): failed to open stream: No such file or directory in /***/***.php on line ***, referer: http://***/***.php
PHP Fatal error: require_once(): Failed opening required 'Mail.php' (include_path='.:/usr/share/pear:/usr/share/php') in /***/***.php on line ***, referer: http://***/***.php
というワーニングとエラーが。
そう言えば、PEARのMailパッケージどころか、PEARすら入れていなかったことを思い出す。さっそく、インストールです。備忘録メモメモです。
まずはPEARのインストールから
インストールするパッケージは「php-pear」です。EPELとRemiを組み込んだ、自作スクリプトからインストールします。
# yum_remi install php-pear
yum_remiというエイリアス(スクリプト)については、過去記事をご参照ください。
[CentOS] CentOS7.6のyumリポジトリにEPELとRemiを追加
CentOS7.6には、PHPが5.4、MySQLは互換DBのMariaDB5.5が入っていました。 今回構築している環境は、公開前のWebサイトを構築するテストサーバ的な動作もさせたいので、本番用サーバと仕様を合わせたい。 本番用サーバで...
PEARのチャンネルアップデートを行っておきます。
# pear channel-update pear.php.net
これでPEARの準備はOKです。
PEARのMailパッケージをインストール
続いて、Mailパッケージをインストールします。
# pear install -a Mail
MIMEエンコード/デコード関連のライブラリもインストールします。
# pear install -a Mail_mimeDecode
PEARのディレクトリに、以下のようにMail関連のファイルがインストールされていればOK(CentOS7の環境の場合)。
# la /usr/share/pear
drwxr-xr-x 3 root root 32 2月 21 11:20 Archive
drwxr-xr-x 3 root root 34 2月 21 11:20 Auth
drwxr-xr-x 3 root root 38 2月 21 11:20 Console
drwxr-xr-x 2 root root 184 2月 21 11:22 Mail
-rw-r--r-- 1 root root 9878 2月 21 11:20 Mail.php
drwxr-xr-x 2 root root 40 2月 21 11:20 Net
drwxr-xr-x 2 root root 23 2月 21 11:20 OS
drwxr-xr-x 11 root root 4096 2月 21 11:20 PEAR
-rw-r--r-- 1 root root 35466 2月 8 16:32 PEAR.php
drwxr-xr-x 3 root root 36 2月 21 11:20 Structures
-rw-r--r-- 1 root root 20562 2月 8 16:32 System.php
drwxr-xr-x 3 root root 34 2月 21 11:20 XML
-rw-r--r-- 1 root root 15129 2月 8 16:32 pearcmd.php
-rw-r--r-- 1 root root 1019 2月 8 16:32 peclcmd.php
# la /usr/share/pear/Mail
-rw-r--r-- 1 root root 31632 2月 21 11:20 RFC822.php
-rw-r--r-- 1 root root 6236 2月 21 11:20 mail.php
-rw-r--r-- 1 root root 55900 2月 21 11:22 mime.php
-rw-r--r-- 1 root root 39353 2月 21 11:22 mimeDecode.php
-rw-r--r-- 1 root root 45986 2月 21 11:22 mimePart.php
-rw-r--r-- 1 root root 4968 2月 21 11:20 mock.php
-rw-r--r-- 1 root root 3297 2月 21 11:20 null.php
-rw-r--r-- 1 root root 7486 2月 21 11:20 sendmail.php
-rw-r--r-- 1 root root 15788 2月 21 11:20 smtp.php
-rw-r--r-- 1 root root 15173 2月 21 11:20 smtpmx.php
使い方は?
あとは、PHPでメール送信処理を書いてあげればOK。
<?php
// Mailパッケージのインクルード
require_once( 'Mail.php' );
require_once( 'Mail/mime.php' );
// エンコード指定
mb_language( 'japanese' );
mb_internal_encoding( 'UTF-8' );
// メールの作成
$subject = 'メールのタイトル';
$body = 'メールの本文';
$from_address = '差出人のメールアドレス';
$to_address = '送信先のメールアドレス';
$params = array(
'host' => 'メールを送信するときのホスト名',
'port' => 587,
'auth' => true,
'protocol' => 'SMTP_AUTH',
'debug' => false,
'username' => 'メールを送信するときのSMTPユーザー名',
'password' => 'メールを送信するときのSMTPユーザーパスワード',
);
$headers = array (
'To' => $to_address,
'From' => $from_address,
'Subject' => mb_encode_mimeheader( $subject, "ISO-2022-JP-MS" ),
);
$body = mb_convert_encoding( $body, "ISO-2022-JP-MS", "auto" );
$body = html_entity_decode( $body, ENT_QUOTES );
$smtp = Mail::factory( "smtp", $params );
$status = $smtp->send( $to_address, $headers, $body );
if( PEAR::isError( $status ) ) エラー処理;
?>
細かい部分は、環境によって書き換えてください。
初稿:2019年2月23日
コメント