Что касается SMTP отправки почты проблемы внешнего вида сервера. У меня была та же проблема, проблема с номером PORT.
Используйте Port:587
вместо Port:25
или любые другие варианты ... Я отправлял из Outlook с этим портом, и каждый раз удался.
И для IMAP вопроса присоединения решения спрятано в чувствительности к регистру ...
Если мы рассмотрим функцию object imap_fetchstructure (resource $imap_stream , int $msg_number)
, которая, как правило, отвечает за выборку вложений.
Что мы получаем для Gmail и другие:
stdClass Object
(
[type] => 1
[encoding] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => BOUNDARY // Notice Here...
[value] => b1_04114a96a39b7789f88fdabc7feadc61
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 0
[encoding] => 1
[ifsubtype] => 1
[subtype] => HTML
[ifdescription] => 0
[ifid] => 0
[lines] => 20
[bytes] => 597
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => CHARSET // Notice Here...
[value] => iso-8859-1
)
)
)
[1] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 266988
[ifdisposition] => 1
[disposition] => ATTACHMENT // Notice Here...
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => FILENAME // Notice Here...
[value] => oIROo0jJDb-15.jpg
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => NAME // Notice Here...
[value] => oIROo0jJDb-15.jpg
)
)
)
)
)
что мы получаем для OUTLOOK:
1
[encoding] => 0
[ifsubtype] => 1
[subtype] => MIXED
[ifdescription] => 0
[ifid] => 0
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => boundary
[value] => b1_df2cd0669f50efc788d5aecfdded4957
)
)
[parts] => Array
(
[0] => stdClass Object
(
[type] => 0
[encoding] => 1
[ifsubtype] => 1
[subtype] => HTML
[ifdescription] => 0
[ifid] => 0
[lines] => 23
[bytes] => 729
[ifdisposition] => 0
[ifdparameters] => 0
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => charset // Notice Here...
[value] => iso-8859-1
)
)
)
[1] => stdClass Object
(
[type] => 5
[encoding] => 3
[ifsubtype] => 1
[subtype] => JPEG
[ifdescription] => 0
[ifid] => 0
[bytes] => 266988
[ifdisposition] => 1
[disposition] => attachment // Notice Here...
[ifdparameters] => 1
[dparameters] => Array
(
[0] => stdClass Object
(
[attribute] => filename // Notice Here...
[value] => cqLaQAZSei-15.jpg
)
)
[ifparameters] => 1
[parameters] => Array
(
[0] => stdClass Object
(
[attribute] => name // Notice Here...
[value] => cqLaQAZSei-15.jpg
)
)
)
)
)
?>
Так что теперь, как правило, для извлечения вложений где-то мы используем, если заявление для проверки, если есть любые вложения в эту часть письма. Для этого контекста я бы назвал PHP IMAP Library Part 1 И PHP IMAP Library Part 2 ... Функция Fetching Attachment находится в части 2 учебника.
Get Приложение Функция:
function getAttachments($imap, $mailNum, $part, $partNum) {
$attachments = array();
if (isset($part->parts)) {
foreach ($part->parts as $key => $subpart) {
if($partNum != "") {
$newPartNum = $partNum . "." . ($key + 1);
}
else {
$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") { // Notice here...
$partStruct = imap_bodystruct($imap, $mailNum,
$partNum);
$attachmentDetails = array(
"name" => $part->dparameters[0]->value,
"partNum" => $partNum,
"enc" => $partStruct->encoding
);
return $attachmentDetails;
}
}
return $attachments;
}
Обратите внимание на if
заявление внутри else if
заявления Вы можете видеть, что это сравнение с капиталом ATTACHMENT
, но результат перспективы не имеет капитала ATTACHMENT
они имеют attachment
. Таким образом, вместо этой строки я рекомендую использовать: strtoupper($part->disposition) == 'ATTACHMENT'
...
Таким образом, мы имеем фекальные ...
Так последняя функция должна быть:
function getAttachments($imap, $mailNum, $part, $partNum) {
$attachments = array();
if (isset($part->parts)) {
foreach ($part->parts as $key => $subpart) {
if($partNum != "") {
$newPartNum = $partNum . "." . ($key + 1);
}
else {
$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
);
return $attachmentDetails;
}
}
return $attachments;
}
Я надеюсь, это исправит проблему ... Потому что это было для меня ...
Спасибо ...
Большое спасибо за ваше решение, оно решило мою проблему, спасибо большое – Aditya