[PHP] PEARのMailパッケージを使ってメール送信するための準備

※当サイトでは広告を掲載しています

管理ツールの一部で、更新されるたびに通知メールを送信する機能を持たせているのですが、サーバをお引越ししてからというもの、メールが届かなくて不思議に思っていました。

そう、エラーログを全く確認していなかったという、やってはいけないミス。ほぼ自分にしか影響しないツールで良かった~。

さて、気を取り直してエラーログを確認してみたところ、

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日

コメント

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