PHPで受信したHTMLメールを解析するには php-mime-mail-parser を使用すると便利です
https://packagist.org/packages/php-mime-mail-parser/php-mime-mail-parser
composer.json を以下のようにセット
{
"require": {
"php-mime-mail-parser/php-mime-mail-parser": "^2.4"
}
}
composer require php-mime-mail-parser/php-mime-mail-parser
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);
yum -y install php-devel
wget https://pecl.php.net/get/mailparse-2.1.6.tgz
tar zxvf mailparse-2.1.6.tgz
cd mailparse-2.1.6
phpize
./configure
make
make install
make install まで無事終了すると次のような表示が出ます。
Installing shared extensions: /usr/lib64/php/modules/
PHP5.2から filter_var というメールアドレス等をチェックする関数が追加されています。
filter_var('bob@example.com', FILTER_VALIDATE_EMAIL);
便利なのですが昔の日本の携帯アドレスはRFC準拠していなくても使えていたみたいですし、そういったアドレスはエラーとされてしまいます。
それなら正規表現のほうがカスタマイズがきいていいような気がします。
PHPのメジャーフレームワークの正規表現を網羅してクラス化してあります。便利!
http://d.hatena.ne.jp/m-tag/20081118/1227000201
/^[a-z0-9!#$%&'*+\/=?^_`|~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`|~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[a-z]2,4|museum|travel)$/i
/^[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
/^([a-z0-9_]|\-|\.|\+)+@(([a-z0-9_]|\-)+\.)+[a-z]{2,6}$/i
http://www.rubular.com/
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
外部SMTPサーバを利用してメールを送信するには PEAR:Mail を利用します。
( PEAR:Mail )
( PEAR:Net:SMTP )
( PEAR:Net:Socket )
『例』
送信元 : 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
がおすすめです