outlook — PHP IMAP получает вложение с сервера Microsoft Exchange

Здравствуйте, мой клиент попросил меня создать сайт с использованием PHP, с помощью которого он может читать / отвечать на все свои электронные письма со всех своих учетных записей. Теперь у него есть корпоративная учетная запись на сервере Microsoft Exchange, я использую PHP imap_open для получения электронной почты с почтовых серверов, я могу получать вложения электронной почты из учетной записи Gmail, но не могу получить вложения из учетных записей сервера Microsoft Exchange. Ошибка не генерируется, поэтому я не уверен, что не так. Нужно ли мне писать какой-то специальный код для получения вложений из учетных записей электронной почты сервера Microsoft Exchange?

Также аналогичная проблема сохраняется при попытке отправить электронную почту, я могу отправлять электронную почту из системы PHP, используя данные GTP SMTP, но не с сервера Microsoft Exchange

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

Код поиска вложения работает нормально для учетных записей Gmail

0

Решение

Относительно проблемы отправки почты SMTP для сервера Outlook. У меня была такая же проблема, проблема с номером порта.

использование Port:587 вместо Port:25 или любые другие варианты … Я отправлял из Outlook с этим портом, и каждый раз я успешен.

И для проблемы прикрепления IMAP решение скрыто в чувствительности к регистру …

Если мы посмотрим на функцию object imap_fetchstructure ( resource $imap_stream , int $msg_number) который обычно отвечает за получение вложений.

Что мы получаем за Gmail и другие:

stdClass Object
(
[тип] => 1
[кодировка] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[attribute] => BOUNDARY // Обратите внимание ...
[значение] => b1_04114a96a39b7789f88fdabc7feadc61
)

)

[parts] => Массив
(
[0] => stdClass Object
(
[тип] => 0
[кодировка] => 1
[ifsubtype] => 1
[subtype] => HTML
[ifdescription] => 0
[ifid] => 0
[линии] => 20
[байтов] => 597
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[attribute] => CHARSET // Обратите внимание ...
[значение] => iso-8859-1
)

)

)

[1] => объект stdClass
(
[тип] => 5
[кодировка] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 266988
[ifdisposition] => 1
[disposition] => ATTACHMENT // Обратите внимание, здесь ...
[ifdparameters] => 1
[dparameters] => Массив
(
[0] => stdClass Object
(
[attribute] => FILENAME // Обратите внимание ...
[значение] => oIROo0jJDb-15.jpg
)

)

[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[attribute] => NAME // Обратите внимание ...
[значение] => oIROo0jJDb-15.jpg
)

)

)

)

)

Что мы получаем за OUTLOOK:

1
[кодировка] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[атрибут] => граница
[value] => b1_df2cd0669f50efc788d5aecfdded4957
)

)

[parts] => Массив
(
[0] => stdClass Object
(
[тип] => 0
[кодировка] => 1
[ifsubtype] => 1
[subtype] => HTML
[ifdescription] => 0
[ifid] => 0
[линии] => 23
[байтов] => 729
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[attribute] => charset // Обратите внимание ...
[значение] => iso-8859-1
)

)

)

[1] => объект stdClass
(
[тип] => 5
[кодировка] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 266988
[ifdisposition] => 1
[disposition] => attachment // Обратите внимание, здесь ...
[ifdparameters] => 1
[dparameters] => Массив
(
[0] => stdClass Object
(
[attribute] => filename // Обратите внимание, здесь ...
[value] => cqLaQAZSei-15.jpg
)

)

[ifparameters] => 1
[параметры] => массив
(
[0] => stdClass Object
(
[attribute] => name // Обратите внимание ...
[value] => cqLaQAZSei-15.jpg
)

)

)

)

)
?>

Так что теперь, обычно для извлечения вложений где-то, мы используем оператор if для проверки, есть ли в этой части письма какие-либо вложения. В этом контексте я бы сослался на Библиотека PHP IMAP, часть 1 А также Библиотека PHP IMAP, часть 2… Функция Fetching Attachment содержится во второй части учебного пособия.

Получить функцию вложения:

функция getAttachments ($ imap, $ mailNum, $ part, $ partNum) {
$ attachments = array ();

if (isset ($ part-> parts)) {
foreach ($ part-> parts as $ key => $ subpart) {
if ($ partNum! = "") {
$ newPartNum = $ partNum. "" , ($ ключ + 1);
}
еще {
$ newPartNum = ($ key + 1);
}
$ result = getAttachments ($ imap, $ mailNum, $ subpart,
$ NewPartNum);
if (count ($ result)! = 0) {
array_push ($ attachments, $ result);
}
}
}
else if (isset ($ part-> disposition)) {
if ($ part-> disposition == "ATTACHMENT") {// Заметьте здесь ...
$ partStruct = imap_bodystruct ($ imap, $ mailNum,
$ PartNum);
$ attachmentDetails = array (
"name" => $ part-> dparameters [0] -> value,
"partNum" => $ partNum,
"enc" => $ partStruct-> encoding
);
вернуть $ attachmentDetails;
}
}

вернуть $ вложения;
}

Обратите внимание на if заявление внутри else if Заявление Вы можете увидеть это по сравнению с капиталом ATTACHMENT но результат Outlook не имеет капитала ATTACHMENT у них есть attachment, Поэтому вместо этой строки я рекомендую использовать: strtoupper($part->disposition) == 'ATTACHMENT'

Таким образом, у нас работает приложение …

Итак, последняя функция должна быть:

функция getAttachments ($ imap, $ mailNum, $ part, $ partNum) {
$ attachments = array ();

if (isset ($ part-> parts)) {
foreach ($ part-> parts as $ key => $ subpart) {
if ($ partNum! = "") {
$ newPartNum = $ partNum. "" , ($ ключ + 1);
}
еще {
$ newPartNum = ($ key + 1);
}
$ result = getAttachments ($ imap, $ mailNum, $ subpart,
$ NewPartNum);
if (count ($ result)! = 0) {
array_push ($ attachments, $ result);
}
}
}
else if (isset ($ part-> disposition)) {
if (strtoupper ($ part-> disposition) == "ATTACHMENT") {
$ partStruct = imap_bodystruct ($ imap, $ mailNum,
$ PartNum);
$ attachmentDetails = array (
"name" => $ part-> dparameters [0] -> value,
"partNum" => $ partNum,
"enc" => $ partStruct-> encoding
);
вернуть $ attachmentDetails;
}
}

вернуть $ вложения;
}

Я надеюсь, что это решит проблему … Потому что это сделал для меня …

Спасибо…

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]