phpでのメール転送(添付ファイルつき)について
目的:
phpにて、添付付きメールを、件名だけ変更して、添付ファイルごと外部へ転送する。
現在、メール受信したものを、mysqlに保存(UID、件名、送信元メールアドレス(一致したものを、指定の件名に変更)、送信日、受信日、本文)、
添付ファイルはサーバー上に保存し、
メール送信時に、サーバー上に保存した添付ファイルとmysqlのデータを読み込み、送信しています。
(添付ファイルは、定期的に削除)
これを、もっと簡潔に出来ないでしょうか。
サーバー上に添付ファイルを残さないで済み、
未受信のメールのみ
1画面上で、添付メールごと転送できるのが理想です。
※mysqlへの保存は、あってもなくてもかまいません。
以下が、現在の状態です。
参考にしたのは、こちらのサイトです。
http://hal456.net/qdmail_rec/top
http://www.favorite-labo.org/view/202
※サーバはCPIです。
**メール受信処理**
<?php
// QdmailReceiver呼び出し
require_once('qdmail_receiver.php');
//POPサーバー(受信サーバー)にアクセスするための初期設定。
$server = array(
'protocol'=>'pop3',
'host'=>'(ホスト名)',
'user'=>'(ユーザー名)',
'pass'=>'(パスワード)',
);
qd_receive_mail( 'start' , $server , 'eucJP-win' );
//オブジェクト指向モードでの初期化
$receiver = QdmailReceiver::start( 'pop' , $server);
for($i = 1 ; $i <= $receiver->count() ; $i++){
$todaydata = date("Y-m-d");
// *************** メールデータ取得処理 ***************
$pointer = $receiver->pointer(); // pointer
$popuid = $receiver -> header( 'popuid' );// UID
$subject_name = mb_convert_encoding(($receiver->header( array('subject','name') , 'none' )),"Shift-JIS","auto");//件名
$from_mail = $receiver->header( array('from','mail') , 'none');//送信元メールアドレス
$date = $receiver -> header('date');//送信日
$text = mb_convert_encoding(($receiver->text()),"Shift-JIS","auto");//本文
// *************** UID照合処理 ***************
include '(mysql接続)';
$ii=0;
while ($row = mysql_fetch_assoc($result)) {
$ii++;
}
if($ii == 0){
// *************** 転送前データの保存 ***************
include '(mysql接続)';
// *************** 添付ファイル保存 ***************
$attach = $receiver->attach();
foreach($attach as $att){
$moji = mb_convert_encoding($att['filename'],"Shift-JIS","auto");
$fp=fopen($moji,'w');
fputs($fp,$att['value']);
fclose($fp);
}
}else{
print('取得済みにつき未処理');
}
?>
**メール送信**
<?php
//マイムタイプ定義
$mime_content_types = array(
'ez' => 'application/andrew-inset',
'atom' => 'application/atom+xml',
'atomcat' => 'application/atomcat+xml',
~略~
'avi' => 'video/x-msvideo',
'movie' => 'video/x-sgi-movie',
'ice' => 'x-conference/x-cooltalk'
);
//送信先メールアドレス
$to = '(送信先メールアドレス)';
//送信元メールアドレス
$from = '(取得した送信元メールアドレス)';
//件名
$subject = '(変更した件名)';
//メール本文
$message = (取得した本文);
//添付ファイル
$files = array('(添付ファイル1へのパス)','(添付ファイル2へのパス)…以下、あるだけ');
//件名・本文をエンコード
$subject = mb_convert_encoding($subject, 'JIS', 'Shift-JIS');
$message = mb_convert_encoding($message, 'JIS', 'Shift-JIS');
$subject = '=?iso-2022-jp?B?' . base64_encode($subject) . '?=';
//バウンダリ文字列を定義
if (empty($files)) {
$boundary = null;
} else {
$boundary = md5(uniqid(rand(), true));
}
//メールボディを定義
if (empty($files)) {
$body = $message;
} else {
$body = "--$boundary\n";
$body .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
$body .= "Content-Transfer-Encoding: 7bit\n";
$body .= "\n";
$body .= "$message\n";
foreach($files as $file) {
if (!file_exists($file)) {
continue;
}
$info = pathinfo($file);
$content = $mime_content_types[$info['extension']];
$filename = basename($file);
$body .= "\n";
$body .= "--$boundary\n";
$body .= "Content-Type: $content; name=\"$filename\"\n";
$body .= "Content-Disposition: attachment; filename=\"$filename\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode(file_get_contents($file))) . "\n";
}
$body .= '--' . $boundary . '--';
}
//メールヘッダを定義
$header = "X-Mailer: PHP5\n";
$header .= "From: $from\n";
$header .= "MIME-Version: 1.0\n";
if (empty($files)) {
$header .= "Content-Type: text/plain; charset=\"iso-2022-jp\"\n";
} else {
$header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
}
$header .= "Content-Transfer-Encoding: 7bit";
//メール送信
if (mail($to, $subject, $body, $header)) {
echo 'メールが送信されました。';
} else {
echo 'メールの送信に失敗しました。';
}
?>
以上、よろしくお願いします
お礼
ご返答ありがとうございます。 > $mail->addHeader('x-jphone-copyright','no-store,no-transfer,no-peripheral'); 上記の命令ですが、画像のヘッダに記述して試した時も、思ったような効果は得られませんでした。多分これはサイトに表示した画像に対しての再配布禁止処理を行うものなのだと思います。 メールに添付した画像では難しいんですかね・・・。 お返事ありがとうございました!