PHPプログラムに関する各種メモ書き:タグ「メール」での検索

PHPで受信したHTMLメールやマルチパートメールを解析する

PHPで受信したHTMLメールを解析するには php-mime-mail-parser を使用すると便利です https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser

● 1. php-mime-mail-parser をインストール

a. composer.json からインストール

composer.json を以下のようにセット

{
    "require": {
        "php-mime-mail-parser/php-mime-mail-parser": "^2.4"
    }
}

b. composerコマンドからインストール

composer  require php-mime-mail-parser/php-mime-mail-parser

● 2. php-mime-mail-parser で受信したHTMLメールを解析する

require_once __DIR__ . '/../vendor/autoload.php';
$Parser = new PhpMimeMailParser\Parser();
$mail_src = file_get_contents('mail.txt');
$Parser->setText($mail_src);
$to            = $Parser->getHeader('to'); // "test" <test@example.com>, "test2" <test2@example.com>
$addressesTo   = $Parser->getAddresses('to'); //Return an array : [[test, test@example.com, false],[test2, test2@example.com, false]]
$from          = $Parser->getHeader('from'); // "test" <test@example.com>
$addressesFrom = $Parser->getAddresses('from'); //Return an array : test, test@example.com, false
$subject       = $Parser->getHeader('subject');
$text          = $Parser->getMessageBody('text');
$html          = $Parser->getMessageBody('html');
print_r($html);
No.1048
08/01 13:41

edit

メール

さくらのレンタルサーバへPHP のPECL拡張をインストールする

さくらのレンタルサーバへPECL拡張をインストールするには

  1. 使用しているPHPバージョンに対応するpecl拡張のソースをダウンロード・展開
  2. phpize , configure , make
  3. 任意の場所に【xxxxx.so】ファイルを移動
  4. php.iniに `extension = xxxxx.so` を記述

でできます。

例としてPECL拡張 `mailparse` をインストールしてみます。

1. 使用しているPHPバージョンに対応するpecl拡張のソースをダウンロード・展開する

https://pecl.php.net/
から使用したいpecl拡張をダウンロードします。 (この際対応しているPHPのバージョンを確認すること) 例 : mailparse バージョン 2.1.6 をダウンロードします

wget https://pecl.php.net/get/mailparse-2.1.6.tgz
tar zvxf mailparse-2.1.6.tgz
cd mailparse-2.1.6

2. phpize , configure , make します

ターミナルから以下のコマンドを実行します。

phpize
./configure
make
make test

3. 任意のフォルダにファイルをコピー

ここでは ホームディレクトリ直下の php_modules ディレクトリにコピーします

mkdir cd ~/php_modules/
cp ./modules/mailparse.so   ~/php_modules/

4. さくらレンタルサーバの管理画面から PHP設定の編集 を押して php.iniに設定を記述します

extension_dir =  /home/『ユーザー名』/php_modules/
extension = mailparse.so

phpinfo() で項目が表示されていれば正しくインストールされています。

5. コマンドラインからも使えるようにエイリアスを設定する

● .bash_profileに以下を追加

alias php='php -c/home/『ユーザー名』/www/php.ini'

● .cshrc に以下を追加

alias php	php -c /home/『ユーザー名』/www/php.ini

追加後にコマンドラインから

php -m

で該当モジュール(mailparse)が表示されていれば正しくインストールされています 

6. PECL拡張をインストールしたPHPを使用してcomposerを使う

composer requie hogehoge/hogehoge

とするかわりに

php /PATH/TO/COMPOSER/composer.phar   require   hogehoge/hogehoge

とすればいいでしょう。

No.1047
10/13 10:22

edit

メール

PHPでメールアドレスのチェックを【filter_var】【正規表現】で行う。

PHP5.2から filter_var というメールアドレス等をチェックする関数が追加されています。

filter_var でのメールアドレスのチェック

filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);

便利なのですが昔の日本の携帯アドレスはRFC準拠していなくても使えていたみたいですし、そういったアドレスはエラーとされてしまいます。

それなら正規表現のほうがカスタマイズがきいていいような気がします。

正規表現でのメールアドレスチェッククラス【AddressValidate.php】

PHPのメジャーフレームワークの正規表現を網羅してクラス化してあります。便利!

http://d.hatena.ne.jp/m-tag/20081118/1227000201

PHPメジャーフレームワークの正規表現

CakePHP 1.2

/^[a-z0-9!#$%&'*+\/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]2,4|museum|travel)$/i

CakePHP 1.3

/^[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&\'*+\/=?^_`{|}~-]+)*@(?:[-_a-z0-9][-_a-z0-9]*\.)*(?:[a-z0-9][-a-z0-9]{0,62})\.(?:(?:[a-z]{2}\.)?[a-z]{2,4}|museum|travel)/i

Ethna

/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i

正規表現がチェックできるサイト

http://www.rubular.com/


Perlの場合CPANの Email::Valid を使うのがいいでしょう

http://search.cpan.org/search?query=Email%3A%3AValid&mode=all


参考

http://d.hatena.ne.jp/j0hn/20070602

http://d.hatena.ne.jp/m-tag/20081118/1227000201

添付ファイル1
No.889
08/12 10:29

edit

添付ファイル

正規表現
メール

外部SMTPサーバを利用してメールを送信する。

外部SMTPサーバを利用してメールを送信するには PEAR:Mail を利用します。

必要な PEAR パッケージ(ダウンロードしてサーバ上にアップ)

( PEAR:Mail )

( PEAR:Net:SMTP )

( PEAR:Net:Socket )

PHPコードは以下のように記述します。

『例』

送信元 : xxxxx@hoge.com

送信先 : xxxxx@fugafuga.com

使用するSMTPサーバ : mail.fugafuga.com

ユーザー名 : xxxxx@fugafuga.com

パスワード : aiueoaiueo

$to = 'xxxxx@hoge.com';
$from = 'xxxxx@fugafuga.com';
$mailtext = 'メール送信テスト';

// PEAR:Mail
require_once "Mail.php";
$params = array(
  'host' => 'mail.fugafuga.com',
  'port' => '587',
  'auth' => true,
  'username' => 'xxxxx@fugafuga.com',
  'password' => 'aiueoaiueo',
);		
$headers['From']    = $from;
$headers['To']      = $to;
$headers['Subject'] = mb_encode_mimeheader($subject);
$mailtext = mb_convert_encoding($mailtext, "ISO-2022-JP", "auto");
$objMail =& Mail::factory('smtp', $params);
$result = $objMail->send($to, $headers, $mailtext);
if (PEAR::isError($result)) {
	die($result->getMessage());
}

その他のクラスとしては

phpmailer : https://packagist.org/packages/phpmailer/phpmailer

がおすすめです

No.881
03/08 20:32

edit

メール
PEAR