Перехват электронной почты PHP не отправляет электронную почту с вложениями

Я установил перехват электронной почты на своем сервере.

Ниже приведена моя переадресация электронной почты, установленная на сервере.

[email protected], "/home/server/php_pipe_mail.php"

ниже мой код для php_pipe_mail.php

#!/usr/bin/php -q
<?php 

require_once('mimeDecode.php');
include('sql-connect.php');
error_reporting(E_ALL);


ob_start();


$raw_email = '';



if (!$stdin = fopen("php://stdin", "R"))
{
    echo "ERROR: UNABLE TO OPEN php://stdin \n";
}

// ABLE TO READ THE MAIL
else
{
    while (!feof($stdin))
    {
        $raw_email .= fread($stdin, 4096);
    }
    fclose($stdin);
}



$raw_email = preg_replace('/ +/', ' ', $raw_email);


var_dump($raw_email);


$buf = ob_get_contents();

$params['include_bodies'] = true;
$params['decode_bodies'] = true;
$params['decode_headers'] = true;
$params['input'] = $buf;
$params['crlf'] = "\r\n"; 

//Creating temp file on server 
$myFile = "amail.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $buf);
fclose($fh);


//Generating mail structure in object format
$structure = Mail_mimeDecode::decode($params); 
$attachment = array();

$mail_date= date( 'Y-m-d H:i:s', strtotime($structure->headers['date']) );
$from = $structure->headers['from'];
$to = $structure->headers['to'];
$subject = htmlentities($structure->headers['subject'],ENT_QUOTES);
if($structure->ctype_primary == "multipart")
{
    $body_text = $structure->parts[0]->parts[0]->body;
$body_html = $structure->parts[0]->parts[1]->body;

$x = 0;
//fetch attachment
foreach ($structure->parts as $part) {
    // only save if an attachment
    if (isset($part->disposition) and ($part->disposition=='attachment')) {
        $attachment[$x]["filename"] = $part->d_parameters['filename'];
        $attachment[$x]["content_type"] = $part->ctype_primary . "/" .          $part->ctype_secondary;
        $attachment[$x]["body"] = addslashes($part->body);
        $x++;
    }
}
}
else 
{
$body_text = $structure->parts[0]->body;
$body_html = $structure->parts[1]->body;
}


$qry1 = "insert into mail_buffer(mail_date,mail_from,     mail_to,mail_subject,mail_text_body,mail_html_body) Values('". $mail_date ."','".$from."','".$to."','".$subject."','".$body_text."','".$body_html."')";

mysql_query($qry1) or die(mysql_error($con));

$last_id = mysql_insert_id();

if(count($attachment) > 0)
{
for($i=0; $i < count($attachment); $i++)
{
    $qry = "insert into mail_attachment(email_id,content_type, file_name,body) Values('". $last_id ."','".$attachment[$i]['content_type']."','".$attachment[$i]['filename']."','".$attachment[$i]['body']."')";
    mysql_query($qry) or die(mysql_error($con));
}
}



mysql_close($con);

ob_end_clean();

?>

Теперь приведенный выше скрипт работает отлично.

Я могу получить заголовок сообщения, тело и вложения и без проблем сохранить их в базе данных.

Когда приходит электронное письмо без вложений, все работает нормально, и электронное письмо доставляется на адрес электронной почты, который я перехватываю.

Но следующее не работает.

Когда приходит электронная почта с вложениями, содержимое электронной почты хранится в базе данных, но электронная почта не доставляется на адрес электронной почты, который я перехватываю, и я получаю следующее сообщение об ошибке в ответной электронной почте.

Отправленное вами сообщение не может быть доставлено одному или нескольким получателям. Это постоянная ошибка. Не удалось выполнить следующие адреса:

канал на |/home/server/php_pipe_mail.php, сгенерированный [email protected]

Может ли кто-нибудь помочь мне в этом вопросе.

Спасибо.


person amar4u    schedule 28.05.2011    source источник
comment
Рассмотрите возможность использования swiftmailer.org.   -  person Denis de Bernardy    schedule 28.05.2011
comment
Денис, подскажите, как это может помочь мне решить мою проблему? что-то не так в коде?   -  person amar4u    schedule 28.05.2011


Ответы (1)


Может ли быть так, что при наличии вложения ваш сценарий что-то повторяет? Раньше у меня были проблемы с передачей электронных писем, и я видел сообщения об ошибках, возвращаемые отправителям, и они были связаны с тем, что сценарий конвейера производил какой-то вывод. Возможно, ваш error_reporting(E_ALL); позволяет скрипту выводить результат — попробуйте error_reporting(0);

person Luke Stevenson    schedule 28.05.2011