Загрузка почтового вложения

  • Автор темы Dimaster1
  • 43
  • Обновлено
  • 17, May 2024
  • #1
Привет,

У меня есть PHP-скрипт, который я использую для загрузки вложения электронной почты из моего почтового ящика в папку на моем сайте.

Когда электронное письмо отправляется непосредственно с сервера, который создает отчет в формате .csv, сценарий распознает наличие электронного письма, но не загружает вложение к электронному письму.

Если это письмо отправлено на мою электронную почту (обмен Outlook), а затем я пересылаю его на свой сайт, скрипт работает - видит письмо и загружает вложение в указанную папку. Я не могу это решить.

Есть какие-нибудь подсказки? Я не думаю, что это проблема со сценарием, поскольку я использую практически тот же код для той же цели в других частях сайта.

Я чувствую, что это связано в первую очередь с создаваемым вложением.

К сожалению, я могу многое сделать с созданием файла CSV, я могу только изменить его на файл Excel в формате PDF.

Вот сценарий
 

set_time_limit(3000);

// ******************************************************

// Part 1 Transfer

// ******************************************************

//

$hostname = '{nysite.com:993/imap/ssl}INBOX';

$username = '[email protected]';

$password = 'password';

$saveloc = 'DataFiles/';

$backUpsaveloc = 'DataFilesBackup/';

sleep(3);

$inbox = imap_open($hostname,$username,$password) or die('cant connect');

$emails = imap_search($inbox,'ALL');

$max_emails = 20;

if($emails) {

$count = 1;

rsort($emails);

foreach($emails as $email_number)

{

$overview = imap_fetch_overview($inbox,$email_number,0);

$message = imap_fetchbody($inbox,$email_number,2);

$structure = imap_fetchstructure($inbox, $email_number);

$attachments = array();

if(isset($structure->parts) && count($structure->parts))

{

for($i = 0; $i < count($structure->parts); $i++)

{

$attachments[$i] = array(

'is_attachment' => false,

'filename' => '',

'name' => '',

'attachment' => ''

);

if($structure->parts[$i]->ifdparameters)

{

foreach($structure->parts[$i]->dparameters as $object)

{

if(strtolower($object->attribute) == 'filename')

{

$attachments[$i]['is_attachment'] = true;

$attachments[$i]['filename'] = $object->value;

}

}

}

if($structure->parts[$i]->ifparameters)

{

foreach($structure->parts[$i]->parameters as $object)

{

if(strtolower($object->attribute) == 'name')

{

$attachments[$i]['is_attachment'] = true;

$attachments[$i]['name'] = $object->value;

}

}

}

if($attachments[$i]['is_attachment'])

{

$attachments[$i]['attachment'] = imap_fetchbody($inbox, $email_number, $i+1);

if($structure->parts[$i]->encoding == 3)

{

$attachments[$i]['attachment'] = base64_decode($attachments[$i]['attachment']);

}

elseif($structure->parts[$i]->encoding == 4)

{

$attachments[$i]['attachment'] = quoted_printable_decode($attachments[$i]['attachment']);

}

}

}

sleep(5);

// imap_delete($inbox, $email_number);

sleep(2);

}

$type=".txt";

foreach($attachments as $attachment)

{

if($attachment['is_attachment'] == 1)

{

$filename = $attachment['filename'];

$subject = $overview[0]->subject ;

$subject = str_replace(' ', '', $subject);

if (substr($subject,0,3) == "FW:")

{

$subject = substr($subject, 3);

}

$fp = fopen($saveloc .$subject .$type, "w+");

fwrite($fp, $attachment['attachment']);

$fpb = fopen($backUpsaveloc .$subject .$type, "w+");

fwrite($fpb, $attachment['attachment']);

fclose($fp);

}

}

if($count++ >= $max_emails) break;

}

}

sleep(10);

//imap_expunge($inbox);

imap_close($inbox);

sleep(10);

PHP:

Dimaster1


Рег
08 Feb, 2015

Тем
1

Постов
2

Баллов
12
  • 22, May 2024
  • #2
Мне кажется, что скрипт на вашем сервере, создающий вложение, не выполняет свою работу должным образом.

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

venom777


Рег
27 Apr, 2015

Тем
0

Постов
1

Баллов
1
  • 03, Jun 2024
  • #3
Привет, Да, это тоже мое подозрение. К сожалению, у меня нет возможности изменить то, что отправляется, это карты, которые мне сдают. Думаю, мне нужно продолжать искать скрипт, который будет читать вложение. Должен быть способ, чтобы почтовые клиенты могли читать электронные письма.
 

aaa111aaa1


Рег
02 Mar, 2012

Тем
1

Постов
4

Баллов
14
Тем
49554
Комментарии
57426
Опыт
552966

Интересно