ANo.2のソースに転送処理を組み込んでみました。とりあえず添付ファイルなどがあっても問題なく転送出来ています。参考にどうぞ。
<?php
$server = 'POPサーバ名';
$user = 'メールアカウント';
$pass = 'パスワード';
$log = array();
$dat = array();
$sock = fsockopen($server, 110, $errno, $errstr, 20) or die(sprintf('cannot connect %d, %s', $errno, $errstr));
$buf = fgets($sock, 512);
if(substr($buf, 0, 3) != '+OK') die($buf);
$buf = _sendcmd("USER $user");
$buf = _sendcmd("PASS $pass");
$data = _sendcmd("STAT");//STAT -件数とサイズ取得 +OK 8 1234
sscanf($data, '+OK %d %d', $num, $size);
for($i=1; $i<=$num; $i++) {
$line = _sendcmd("RETR $i");
$dat[$i] = '';
while (!preg_match("/^\.\r\n/", $line)) {
$line = fgets($sock,512);
$dat[$i] .= $line;
}
// $data = _sendcmd("DELE $i");
}
$buf = _sendcmd("QUIT");
fclose($sock);
file_put_contents('pop3log.txt', implode(PHP_EOL, $log));
foreach ($dat as $key=>$val) {
$out = md5(microtime()) . '.txt';
file_put_contents($out, $val);
printf('%03d : %s<br>', $key, $out);
_mailsend($val);
}
function _sendcmd($cmd) {
global $sock, $log;
fputs($sock, $cmd."\r\n");
$log[] = 'send : ' . $cmd;
$buf = fgets($sock, 512);
$log[] = 'recv : ' . $buf;
if(substr($buf, 0, 3) == '+OK') {
return $buf;
} else {
die($buf);
}
return false;
}
function _mailsend($arg) {
$mail = explode("\r\n", $arg);
$head = array();
$body = array();
$sw = 0; // 0:ヘッダ、1~:ボディ
foreach($mail as $line) {
if (trim($line) == '') { $sw++; } // 空行があったらヘッダ終了
if ($sw == 0) { // ヘッダチェック
$hf = false; // 残すヘッダは true
if ((substr($line, 0, 1) != " ")&&(substr($line, 0, 1) != "\t")) {
if (strtolower(substr($line, 0, 7)) == "content") { $hf = true; } // content* は残す
if (strtolower(substr($line, 0, 4)) == "from") { // fromはx-org-fromにして残す
$line = 'x-org-' . $line;;
$hf = true;
}
}
}
switch ($sw) {
case 0:
if ($hf) { $head[] = rtrim($line); }
break;
default:
$body[] = rtrim($line);
break;
}
}
$head[] = 'From: 自分のメールアドレス';
return mail('転送先メールアドレス', 'test', implode("\r\n", $body), implode("\r\n", $head)); // subjectに日本語を使うときはmime処理なども自前で
}
お礼
shimix様 御丁寧にありがとうございます。 参考にさせて頂きます。 ただ、私の方で、頂いたソースの 'POPサーバ名'; 'メールアカウント'; 'パスワード'; '自分のメールアドレス'; '転送先メールアドレス' 部分のみを変更し、実行すると、メールは転送されるのですが、 本文にヘッダーの一部が入り、添付ファイルが添付されていない状態となりました(汗 件名 OKです! 本文 ヘッダーの一部+本文+添付ファイルの文字情報 添付ファイル 添付されていない状態 CPIの環境でしょうか(汗 本日より2日ほど出張の為、 帰ってきたら、頂いたソースを参考に、再チャレンジしてみます。 現在、メール本文は、下記のような状態となっております。 ソース表示ではなく、届いたメールを開いた状態です。 ********** メール本文ここから ********** Content-Type: multipart/mixed; From: (自分のメールアドレス) X-Brightmail-Tracker: AAAAAA== X-Brightmail-Tracker: AAAAAA== This is a multi-part message in MIME format. --------------050804090906090400040804 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit (本文) --------------050804090906090400040804 Content-Type: application/x-zip-compressed; name="test.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test.zip" UEsDBAoAAAAAALQJe0QAAAAAAAAAAAAAAAAIAAAAdGVzdC50eHRQSwECPwAKAAAAAAC0CXtE AAAAAAAAAAAAAAAACAAkAAAAAAAAACAAAAAAAAAAdGVzdC50eHQKACAAAAAAAAEAGAChtlBZ DknPAaG2UFkOSc8BobZQWQ5JzwFQSwUGAAAAAAEAAQBaAAAAJgAAAAAA --------------050804090906090400040804-- . ********** ここまで **********