2015-12-10 1 views
5

Как мы видим ниже, нет какого-либо метода под названием getAttachments(), так как я могу перечислить/получить/петлю через вложения с объекта Swift_Message? Я не мог найти никакой информации в документации или примере. Все методы перечислены ниже и doc is here. Я могу проверить все остальное, кроме приложений.Получение списка вложений из объекта Swift_Message

Я использую symfony для этого.

Array 
(
    [0] => __construct 
    [1] => newInstance 
    [2] => addPart 
    [3] => attachSigner 
    [4] => detachSigner 
    [5] => toString 
    [6] => toByteStream 
    [7] => __wakeup 
    [8] => __clone 
    [9] => getNestingLevel 
    [10] => setSubject 
    [11] => getSubject 
    [12] => setDate 
    [13] => getDate 
    [14] => setReturnPath 
    [15] => getReturnPath 
    [16] => setSender 
    [17] => getSender 
    [18] => addFrom 
    [19] => setFrom 
    [20] => getFrom 
    [21] => addReplyTo 
    [22] => setReplyTo 
    [23] => getReplyTo 
    [24] => addTo 
    [25] => setTo 
    [26] => getTo 
    [27] => addCc 
    [28] => setCc 
    [29] => getCc 
    [30] => addBcc 
    [31] => setBcc 
    [32] => getBcc 
    [33] => setPriority 
    [34] => getPriority 
    [35] => setReadReceiptTo 
    [36] => getReadReceiptTo 
    [37] => attach 
    [38] => detach 
    [39] => embed 
    [40] => __toString 
    [41] => setBody 
    [42] => getCharset 
    [43] => setCharset 
    [44] => getFormat 
    [45] => setFormat 
    [46] => getDelSp 
    [47] => setDelSp 
    [48] => charsetChanged 
    [49] => generateId 
    [50] => getHeaders 
    [51] => getContentType 
    [52] => setContentType 
    [53] => getId 
    [54] => setId 
    [55] => getDescription 
    [56] => setDescription 
    [57] => getMaxLineLength 
    [58] => setMaxLineLength 
    [59] => getChildren 
    [60] => setChildren 
    [61] => getBody 
    [62] => getEncoder 
    [63] => setEncoder 
    [64] => getBoundary 
    [65] => setBoundary 
    [66] => encoderChanged 
    [67] => __destruct 
) 

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

ToString() выход

.... 
.... 
--_=_swift_v4_1449763083_6fe131190f5a7df1b45687b6bbb117a9_=_ 
Content-Type: image/jpeg; name=38423961aa437473ae2d6cb8caf796d31e20dbc4.jpeg 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment; 
filename=38423961aa437473ae2d6cb8caf796d31e20dbc4.jpeg 

/9j/4AAQSkZJRgABAgEAYABgAAD/4RCIRXhpZgAATU0AKgAAAAgAA4dpAAQAAAABAAAIPpyeAAEA 
.... 
.... 

var_export() выход

Swift_Message::__set_state(array(
    'headerSigners' => 
    array (
), 
    .... 
    .... 
       array (
       'filename' => '38423961aa437473ae2d6cb8caf796d31e20dbc4.jpeg', 
      ), 
    .... 
    .... 

ответ

5

От the code он выглядит как вложения в массив добавляется $_children (от Swift_Mime_SimpleMimeEntity). .

public function attach(Swift_Mime_MimeEntity $entity) 
{ 
    $this->setChildren(array_merge($this->getChildren(), array($entity))); 

    return $this; 
} 

Это заставляет меня думать, что вы можете получить все вложения, используя ->getChildren().

+0

Это один. Он находится здесь: 'foreach ($ message-> getChildren() как $ child) {$ child-> getHeaders() -> get ('content-disposition'); } '. Спасибо. Я действительно свалил это, но не получил никакого результата, поэтому, наверное, я что-то пропустил. – BentCoder

1

Просто хотел, чтобы дать полный пример, основанный на «принято» намек @ qooplmao по выше, так что полное решение заключается в следующем:

$message = This is your Swift_Message object 

foreach ($message->getChildren() as $child) { 
    echo str_replace('attachment; filename=', null, $child->getHeaders()->get('content-disposition')->getFieldBody()).PHP_EOL; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^