2016-10-07 1 views
0

LaravelのMailクラスから送信されたメールの本文をキャプチャしようとしています。イベントmailer.sendingのリッスンでSwift_Messageオブジェクトを取得できますが、getBody()と呼び出すとnullが返されます。mailer.sendingイベントでリッスンするときのgetBody null

ただし、__toString()マジックメソッドを使用してメール全体(ヘッダー付き)を印刷することはできます。電子メールの本文を取得する方法があれば誰でも知っていますか?

ティンカー($メッセージは、イベントの発射から取得される)の使用:Laravelコードを掘り下げる

>>> $message 
=> <Swift_Message #000000004598a18f0000000059c6cf6b> {} 
>>> $message->getBody(); 
=> null 
>>> echo (string) $message; 
Message-ID: <[email protected]> 
Date: Fri, 07 Oct 2016 22:41:02 +0000 
Subject: ... 
From: ... 
To: ... 
MIME-Version: 1.0 
Content-Type: multipart/alternative; 
boundary="_=_swift_v4_1475880062_895bd5de56ade4842a3c198ee264ced0_=_" 


--_=_swift_v4_1475880062_895bd5de56ade4842a3c198ee264ced0_=_ 
Content-Type: text/plain; charset=utf-8 
Content-Transfer-Encoding: quoted-printable 

Email body here 

--_=_swift_v4_1475880062_895bd5de56ade4842a3c198ee264ced0_=_-- 
+0

ライブラリをどのように使用しているのかわかりませんが、コンテストでは '$ message-> getBody();を使う必要がありますか? '$ message-> setBody();の代わりに – Franco

+0

これはLaravelのイベントの発生から取得されます。私は$ message-> getBody()を使用していますが、何らかの理由でnullを返します。 – Devon

+0

メッセージを受け取ろうとしていることを理解しています。ライブラリの使用中にメッセージを設定しましたか?このようにして、 '$ message-> addPart($ body_text、 'text/html')を好むような方法であれば' $ body-> setBody($ body_text) – Franco

答えて

1

を、彼らは、プレーンテキストの電子メールのMIME部分の代わりに体を使用しています。 (これはSwiftmailerの設計によるものかもしれませんが、私は図書館が十分にわかりません)。

私にとっては、このへの迅速な解決をした

 $htmlBody = $message->getBody(); 
     $textBody = ''; 
     $children = $message->getChildren(); 
     if (isset($children[0]) && $children[0] instanceof \Swift_MimePart) { 
      $textBody = $children[0]->getBody(); 
     } 
     $body = ($htmlBody) ? $htmlBody : $textBody; 

しかし、追加のチェックは、最初の子は、プレーンテキストのメールであることを確認するために必要とすることができます。うまくいけば、これは問題に遭遇している他の人に役立ちます。