2010/11/21
PHPでGmailなどのPOP over ssl / SMTP over sslサーバーからメールを送受信する方法をまとめました。
 
CentOS5.5(Linux)、PHPで POP over ssl サーバー(Gmail)からメールを受信する方法。
まず、OSのPHPが"ssl"をサポートしているか確認する。
$ php -i | grep "Stream Socket"
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, sslv3, sslv2, tls
上記の様に"ssl"を含んでいればOKです。
もし、"ssl"が含まれていなかった場合の対処は調べがついていません。ご存じの方が居られましたらご教授ください。
次に、"php-pear-Net-POP3"をインストールします。
CentOS5では、yumには含まれていません。RPMで供給されています。
$ wget http://yum.chrislea.com/centos/5/i386/php-pear-Net-POP3-1.3.6-4.noarch.rpm
$ su
# rpm -ivh php-pear-Net-POP3-1.3.6-4.noarch.rpm
"php-pear-Net-POP3"でGmail(POP over ssl サーバー)からメールを受信するPHPスクリプトのサンプルです。
#!/usr/bin/php
<?php

//ライブラリ読み込み
require_once "Net/POP3.php";

//デフォルトだと合っていない場合があるので、
//システムの日本語文字コードを明示的に設定する。
//これが合っていないと文字化けします。
mb_language("japanese");
mb_internal_encoding("UTF-8");

//接続設定
$host = "ssl://pop.gmail.com";
$port = "995";
$user = "Gmailuser";
$pass = "Gmailpassword";

//サーバーに接続
$pop = new Net_POP3();
$pop->connect($host, $port);
$pop->login($user, $pass, "USER");

//メールに接続
$messages = $pop->getListing();

//メールを1通ずつ読み込む
if($messages){
        foreach($messages as $k => $row){
                $id = $row["msg_id"];
                $mail[] = $pop->getMsg($id); //1通ずつ配列に格納
        }
        print_r($mail); //格納したメールを表示
}

//サーバーとの接続を切断
$pop->disconnect();

?>
 
 
CentOS5.5(Linux)、PHPで SMTP over ssl サーバー(Gmail)からメールを送信する方法。
まず、"php-pear-Mail"をインストールする必要があります。
"php-pear-Mail"をインストールすれば、テキストメールの送信が可能になります。
# yum install php-pear-Mail
"php-pear-Mail"でGmail(POP over ssl サーバー)からテキストメールを送信するPHPスクリプトのサンプルです。
#!/usr/bin/php
<?php

//ライブラリ読み込み
require_once("Mail.php");

//システムの日本語文字コードを明示的に設定する。
//これが合っていないと文字化けします。
//デフォルトのままだと合っていない場合があります。
mb_language("japanese");
mb_internal_encoding("UTF-8");

//接続設定
define("SMTP_HOST", "smtp.gmail.com");
define("SMTP_PORT", "587");
define("SMTP_USER", "Gmailuser");
define("SMTP_PSWD", "Gmailpassword");
define("SMTP_FROM", "Gmailuser@gmail.com");
define("SMTP_DEBUG", true); //デバッグ用(true/false)

//送信文作成
$to="xxxx@xxxxxx.ne.jp";
$from=SMTP_FROM;
$subject="テキストメールを送る";
$body="本文";

//日本語をエンコード
$body = mb_convert_encoding($body,"iso-2022-jp");
$subject=mb_encode_mimeheader(mb_convert_encoding($subject,"iso-2022-jp"));

//SMTPサーバーに接続
$params = array(
    "host"     => SMTP_HOST,
    "port"     => SMTP_PORT,
    "auth"     => true,
    "username" => SMTP_USER,
    "password" => SMTP_PSWD,
    "debug"    => SMTP_DEBUG,
);
$smtp = Mail::factory("smtp", $params);

//メールヘッダーの生成
$headers = array(
  "To"      => $to,
  "From"    => $from,
  "Subject" => $subject,
);

//送信
$return = $smtp->send($to,$headers,$body);
if (PEAR::isError($return)){
    echo("メール送信エラー:".$return->getMessage());
}

?>
 
HTMLメールを送ったり、メールにファイルを添付したりするには、"php-pear-Mail-Mime"を使用する必要があります。
# yum install php-pear-Mail-Mime
Gmail(POP over ssl サーバー)からHTMLメールを送信するPHPスクリプトのサンプルです。
#!/usr/bin/php
<?php

//ライブラリ読み込み
require_once("Mail.php");
require_once("Mail/mime.php");

//システムの日本語文字コードを明示的に設定する。
//これが合っていないと文字化けします。
//デフォルトのままだと合っていない場合があります。
mb_language("japanese");
mb_internal_encoding("UTF-8");

//接続設定
define("SMTP_HOST", "smtp.gmail.com");
define("SMTP_PORT", "587");
define("SMTP_USER", "Gmailuser");
define("SMTP_PSWD", "Gmailpassword");
define("SMTP_FROM", "Gmailuser@gmail.com");
define("SMTP_DEBUG", true); //デバッグ用(true/false)

//送信文作成
$to="xxxx@xxxxxx.ne.jp";
$from=SMTP_FROM;
$subject="HTMLメールを送る";
$body=file_get_contents("hogehoge.html")); //送りたいHTMLファイルを本文にする

//件名をエンコード
$subject=mb_encode_mimeheader(mb_convert_encoding($subject,"iso-2022-jp"));

//SMTPサーバーに接続
$params = array(
    "host"     => SMTP_HOST,
    "port"     => SMTP_PORT,
    "auth"     => true,
    "username" => SMTP_USER,
    "password" => SMTP_PSWD,
    "debug"    => SMTP_DEBUG,
);
$smtp = Mail::factory("smtp", $params);

//html本文処理
$mime = new Mail_Mime("\n");
$mime->setHTMLBody($body);
$body_encode = array(
    "head_charset" => "ISO-2022-JP",
    "html_charset" => mb_internal_encoding(),
);
$body = $mime->get($body_encode);

//ヘッダー生成
$headers = array(
    "To"      => $to,
    "From"    => SMTP_FROM,
    "Subject" => $subject,
);
$header = $mime->headers($headers);

//送信実行
$ret = $smtp->send($to, $header, $body);
if ( PEAR::isError($ret) ) {
        echo("メール送信エラー:".$ret->getMessage()."\n");
}

?>
 
Gmail(POP over ssl サーバー)から添付ファイル付きメールを送信するPHPスクリプトのサンプルです。
#!/usr/bin/php
<?php

//ライブラリ読み込み
require_once("Mail.php");
require_once("Mail/mime.php");

//システムの日本語文字コードを明示的に設定する。
//これが合っていないと文字化けします。
//デフォルトのままだと合っていない場合があります。
mb_language("japanese");
mb_internal_encoding("UTF-8");

//接続設定
define("SMTP_HOST", "smtp.gmail.com");
define("SMTP_PORT", "587");
define("SMTP_USER", "Gmailuser");
define("SMTP_PSWD", "Gmailpassword");
define("SMTP_FROM", "Gmailuser@gmail.com");
define("SMTP_DEBUG", true); //デバッグ用(true/false)

//送信文作成
$to="xxxx@xxxxxx.ne.jp";
$from=SMTP_FROM;
$subject="HTMLメールを送る";
$body="本文";
$attachfile="hogehoge.xxx"; //添付したいファイルを指定する

//日本語のエンコード
$body = mb_convert_encoding($body,"iso-2022-jp");
$subject=mb_encode_mimeheader(mb_convert_encoding($subject,"iso-2022-jp"));

//SMTP接続
$params = array(
    "host"     => SMTP_HOST,
    "port"     => SMTP_PORT,
    "auth"     => true,
    "username" => SMTP_USER,
    "password" => SMTP_PSWD,
    "debug"    => SMTP_DEBUG,
);
$smtp = Mail::factory("smtp", $params);

//添付ファイル処理
$mime = new Mail_Mime("\n");
$mime->setTxtBody($body);
$mime->addAttachment($attachfile,"application/octet-stream");
$body_encode = array(
    "head_charset" => "ISO-2022-JP",
    "text_charset" => "ISO-2022-JP"
);
$body = $mime->get($body_encode);

//ヘッダー生成
$headers = array(
    "To"      => $to,
    "From"    => SMTP_FROM,
    "Subject" => $subject,
);
$header = $mime->headers($headers);

//送信実行
$ret = $smtp->send($to, $header, $body);
if ( PEAR::isError($ret) ) {
        echo("メール送信エラー:".$ret->getMessage()."\n");
}

?>
 

CentOS5.5+PT2+epgrecで地デジ4ch同時録画サーバーを作る。
地デジ録画サーバーをメールで録画予約できる様にする。