function open_imap(&$arr_mail_account, &$imap, $account_no) { // account list array, from config.php global $arrAccountsImap; // $account_noの範囲チェック if ($account_no <= 0 || $account_no > count($arrAccountsImap)) { printf("<p>アカウント指定Noが範囲外です<br/>account=%d</p>\n", $account_no); return false; } // メールアカウント情報(サーバ名、ユーザ名、パスワード等)を得る $arr_mail_account = GetMailAccount($arrAccountsImap[$account_no - 1][1], 'imap'); if (!isset($arr_mail_account['server']) || !isset($arr_mail_account['user']) || !isset($arr_mail_account['password']) || strcmp($arr_mail_account['protocol'], 'imap')) { print "<p>メールアカウント管理エラー(server/user/password値が得られないか、protocolがimapでない)</p>\n"; return false; } // IMAPサーバに接続する if (!strcmp($arr_mail_account['port'], '993')) { // IMAP SSL $imap = new Net_IMAP('ssl://' . $arr_mail_account['server'], 993); } elseif (!strcmp($arr_mail_account['port'], '143')) { // IMAP with StartTLS $imap = new Net_IMAP($arr_mail_account['server'], 143, true); } else { printf("<p>このプログラムで利用可能なMAPサーバのポートは993(SSL)もしくは143のみです</p>\n<p>port=%s</p>\n", $arr_mail_account['port']); return false; } if (PEAR::isError($imap->login($arr_mail_account['user'], $arr_mail_account['password']))) { print "<p>IMAPサーバへの接続に失敗</p>\n"; return false; } printf("<p>IMAPサーバに接続 (%s)</p>\n", htmlspecialchars($arr_mail_account['user'])); return true; }
function open_pop3(&$arr_mail_account, &$pop3, $account_no) { // account list array, from config.php global $arrAccountsPop3; // $account_noの範囲チェック if ($account_no <= 0 || $account_no > count($arrAccountsPop3)) { printf("<p>アカウント指定Noが範囲外です<br/>account=%d</p>\n", $account_no); return false; } // メールアカウント情報(サーバ名、ユーザ名、パスワード等)を得る $arr_mail_account = GetMailAccount($arrAccountsPop3[$account_no - 1][1], 'pop3'); if (!isset($arr_mail_account['server']) || !isset($arr_mail_account['user']) || !isset($arr_mail_account['password']) || strcmp($arr_mail_account['protocol'], 'pop3')) { print "<p>メールアカウント管理エラー(server/user/password値が得られないか、protocolがpop3でない)</p>\n"; return false; } // POP3サーバに接続する if (!$pop3->connect($arr_mail_account['server'], $arr_mail_account['port'])) { print "<p>POP3サーバへの接続に失敗</p>\n"; return; } if (!$pop3->login($arr_mail_account['user'], $arr_mail_account['password'], true)) { $pop3->disconnect(); print "<p>POP3サーバへの接続に失敗</p>\n"; return; } printf("<p>POP3サーバに接続(%s)</p>\n", htmlspecialchars($arr_mail_account['user'])); return true; }
function open_smtp(&$arr_mail_account, &$smtp, $account_no, $debug_flag) { // account list array, from config.php global $arrAccountsSmtp; // $account_noの範囲チェック if ($account_no <= 0 || $account_no > count($arrAccountsSmtp)) { printf("<p>アカウント指定Noが範囲外です<br/>account=%d</p>\n", $account_no); return false; } // メールアカウント情報(サーバ名、ユーザ名、パスワード等)を得る $arr_mail_account = GetMailAccount($arrAccountsSmtp[$account_no - 1][1], 'smtp'); if (!isset($arr_mail_account['server']) || !isset($arr_mail_account['user']) || !isset($arr_mail_account['password']) || strcmp($arr_mail_account['protocol'], 'smtp')) { print "<p>メールアカウント管理エラー(server/user/password値が得られないか、protocolがsmtpでない)</p>\n"; return false; } // 新しい Net_SMTP オブジェクトを作成します if (!($smtp = new Net_SMTP($arr_mail_account['server'], $arr_mail_account['port']))) { print "<p>ネットワーク異常(SMTPオブジェクト作成不能)</p>"; return false; } // デバッグ出力を、stdoutに送る if ($debug_flag) { $smtp->setDebug(true); } // SMTP サーバに接続します if (PEAR::isError($e = $smtp->connect())) { print "<p>ネットワーク異常(SMTPでコネクション不能)</p>"; return false; } // ユーザ名、パスワードを用いてSMTPログオンします // (Digest-MD5, CRAMMD5, LOGIN, PLAINの順に暗号強度の高いもので接続します) if (PEAR::isError($e = $smtp->auth($arr_mail_account['user'], $arr_mail_account['password']))) { $smtp->disconnect(); print "<p>SMTPサーバの認証に失敗</p>"; return false; } printf("<p>接続:%s@%s:%s</p>\n", $arr_mail_account['user'], $arr_mail_account['server'], $arr_mail_account['port']); return true; }
function sendmail_sendmsg($account_no, $subject, $rcpt, $fromname, $msg, $debug_flag) { // account list array, from config.php global $arrAccountsSmtp; // $account_noの範囲チェック if ($account_no <= 0 || $account_no > count($arrAccountsSmtp)) { printf("<p>アカウント指定Noが範囲外です<br/>account=%d</p>\n", $account_no); return; } // メールアカウント情報(サーバ名、ユーザ名、パスワード等)を得る $arr_mail_account = GetMailAccount($arrAccountsSmtp[$account_no - 1][1], 'smtp'); if (!isset($arr_mail_account['server']) || !isset($arr_mail_account['user']) || !isset($arr_mail_account['password']) || strcmp($arr_mail_account['protocol'], 'smtp')) { print "<p>メールアカウント管理エラー(server/user/password値が得られないか、protocolがsmtpでない)</p>\n"; return; } // 送信者のアドレス(user@example.com)の文字列を作成する $from = ''; if (strpos($arr_mail_account['user'], '@') === false) { $from = $arr_mail_account['user'] . '@' . $arr_mail_account['server']; } else { $from = $arr_mail_account['user']; } // mime形式のヘッダ、メール本文 $mime = new Mail_mime(); // mime構造規定の配列を初期化(エンコード別の処理が必要ない場合は値も初期化時に設定) $mime_param = array(); $mime_header = array('User-Agent' => 'PHP Pear Net_mime', 'To' => $rcpt); // 送信者名(From),タイトル(Subject)をエンコードする $internal_charset_save = mb_internal_encoding(); // 現在の内部エンコードを一旦保存 switch ($_POST['subj_transfer']) { case 'mime-base64': $mime_param['head_encoding'] = 'base64'; mb_internal_encoding($_POST['msg_encode']); // 送信者名(From) $mime_header['From'] = mb_encode_mimeheader(mb_convert_encoding($fromname, $_POST['msg_encode'], 'UTF-8'), $_POST['msg_encode'], 'B') . "<" . $from . ">"; // タイトル(Subject) $mime_header['Subject'] = mb_encode_mimeheader(mb_convert_encoding($subject, $_POST['msg_encode'], 'UTF-8'), $_POST['msg_encode'], 'B'); break; case 'mime-quoted-printable': $mime_param['head_encoding'] = 'quoted-printable'; mb_internal_encoding($_POST['msg_encode']); // 送信者名(From) $mime_header['From'] = mb_encode_mimeheader(mb_convert_encoding($fromname, $_POST['msg_encode'], 'UTF-8'), $_POST['msg_encode'], 'Q') . "<" . $from . ">"; // タイトル(Subject) $mime_header['Subject'] = mb_encode_mimeheader(mb_convert_encoding($subject, $_POST['msg_encode'], 'UTF-8'), $_POST['msg_encode'], 'Q'); break; case 'plain': $mime_param['head_encoding'] = '7bit'; $mime_header['From'] = mb_convert_encoding($fromname, $_POST['msg_encode'], 'UTF-8') . "<" . $from . ">"; $mime_header['Subject'] = mb_convert_encoding($subject, $_POST['msg_encode'], 'UTF-8'); break; default: printf("<p>送信者名(From)とタイトル(Subject)転送方式の指定が範囲外 (value=%s)</p>", htmlspecialchars($_POST['subj_transfer'])); return; } mb_internal_encoding($internal_charset_save); // 本文のエンコード $str_temp = ''; switch ($_POST['msg_encode']) { case 'ISO-2022-JP': $mime_param['head_charset'] = 'iso-2022-jp'; $mime_param['text_charset'] = 'iso-2022-jp'; $str_temp = mb_convert_encoding($msg . "\n\n", 'ISO-2022-JP', 'UTF-8'); break; case 'UTF-8': $mime_param['head_charset'] = 'utf8'; $mime_param['text_charset'] = 'utf8'; //$str_temp = mb_convert_encoding($msg . "\n\n", 'UTF-8', 'UTF-8'); $str_temp = $msg; break; case 'SJIS': $mime_param['head_charset'] = 'shift-jis'; $mime_param['text_charset'] = 'shift-jis'; $str_temp = mb_convert_encoding($msg . "\n\n", 'SJIS', 'UTF-8'); break; case 'EUC-JP': $mime_param['head_charset'] = 'euc-jp'; $mime_param['text_charset'] = 'euc-jp'; $str_temp = mb_convert_encoding($msg . "\n\n", 'EUC-JP', 'UTF-8'); break; default: printf("<p>本文エンコード形式の指定が範囲外 (value=%s)</p>", htmlspecialchars($_POST['msg_encode'])); return; } // 本文の転送エンコードは、$mime_param['text_encoding']を設定することで自動的に行われる /* switch($_POST['msg_transfer']) { case '7bit' : break; case '8bit' : break; case 'quoted-printable' : quoted_printable_encode_self($str_temp, $_POST['msg_transfer']); break; case 'base64' : $str_temp = base64_encode($str_temp); break; case 'binay' : break; default : printf("<p>本文転送形式の指定が範囲外 (value=%s)</p>", htmlspecialchars($_POST['msg_transfer'])); return; } */ $mime->setTxtBody($str_temp); $mime_param['text_encoding'] = $_POST['msg_transfer']; /* Mail_Mime オブジェクトを構築 */ $smtp_body = $mime->get($mime_param); $smtp_header = $mime->headers($mime_header); $smtp_auth = array('host' => $arr_mail_account['server'], 'port' => $arr_mail_account['port'], 'auth' => true, 'username' => $arr_mail_account['user'], 'password' => $arr_mail_account['password'], 'debug' => $debug_flag ? true : false); /* 新しいMailオブジェクトを作成 */ $mail =& Mail::factory('smtp', $smtp_auth); /* メールの送信 */ if (PEAR::isError($e = $mail->send($rcpt, $smtp_header, $smtp_body))) { printf("<p>送信エラー発生<br/>エラーメッセージ:%s</p>\n", $e->getMessage()); } else { print "<p>送信完了</p>\n<p>詳細情報<br/>===========</p>\n<pre>\n"; print htmlspecialchars(print_r($smtp_header, true)); printf("</pre>\n<p>本文 : %d バイト</p>\n", strlen($smtp_body)); } }