2015-12-10 116 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()as $ 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; 
}