我试图捕获通过Laravel的Mail类发送的电子邮件的正文。通过收听事件mailer.sending
,我可以获得Swift_Message
个对象,但是,当我调用getBody()
时,它会返回null。
但是,我可以使用__toString()魔术方法打印出整个电子邮件(带标题)。任何人都知道是否有办法获取电子邮件的正文?
使用修补程序(从事件触发中检索$ message):
>>> $message
=> <Swift_Message #000000004598a18f0000000059c6cf6b> {}
>>> $message->getBody();
=> null
>>> echo (string) $message;
Message-ID: <135138ac89676fd3487ff75b10989803@swift.generated>
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 :(得分:1)
深入了解Laravel代码,他们使用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;
但是,可能需要进行额外检查以确保第一个孩子是纯文本电子邮件。希望这可以帮助遇到问题的其他人。