Php 侦听mailer.sending事件时消息getBody null

Php 侦听mailer.sending事件时消息getBody null,php,laravel,laravel-5,swiftmailer,Php,Laravel,Laravel 5,Swiftmailer,我试图捕获通过Laravel邮件类发送的电子邮件的正文。监听事件mailer.sending允许我获取Swift\u消息对象,但是,当我调用getBody()时,它返回null 但是,我可以使用_toString()魔术方法打印整个电子邮件(带有标题)。有人知道有没有办法得到邮件的正文 使用tinker($从事件触发中检索消息): >$message => {} >>>$message->getBody(); =>空 >>>echo(字符串)$消息; 消息ID: 日期:2016年10月7日星期

我试图捕获通过Laravel邮件类发送的电子邮件的正文。监听事件
mailer.sending
允许我获取
Swift\u消息
对象,但是,当我调用
getBody()
时,它返回null

但是,我可以使用_toString()魔术方法打印整个电子邮件(带有标题)。有人知道有没有办法得到邮件的正文

使用tinker($从事件触发中检索消息):

>$message
=>  {}
>>>$message->getBody();
=>空
>>>echo(字符串)$消息;
消息ID:
日期:2016年10月7日星期五22:41:02+0000
主题:。。。
发件人:。。。
致:。。。
MIME版本:1.0
内容类型:多部分/备选;
boundary=“=u swift_v4_1475880062_895bd5de56ade4842a3c198ee264ced0_=u”
--_=\u swift\u v4\u 1475880062\u 895bd5de56ade4842a3c198ee264ced0_=_
内容类型:文本/纯文本;字符集=utf-8
内容传输编码:引用可打印
电子邮件正文在这里
--_=\u swift\u v4\u 1475880062\u 895bd5de56ade4842a3c198ee264ced0_=_--

深入研究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;

但是,可能需要进行额外的检查,以确保第一个孩子是纯文本电子邮件。希望这能帮助其他遇到这个问题的人。

深入研究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;

但是,可能需要进行额外的检查,以确保第一个孩子是纯文本电子邮件。希望这能帮助其他遇到此问题的人。

我看不出您是以何种方式使用库的,但您确定在您的竞赛中需要使用
$message->getBody()而不是
$message->setBody()这是从Laravel的事件触发中捕获的。我正在使用$message->getBody(),但由于某些原因,它返回null。我知道您正在尝试获取消息。您是否在使用库时设置了此消息?通过这种方式,
$message->setBody($body_-text),其中
$body_-text`可以作为您的模板,如果您使用的是我更喜欢的一种方式,`$message->addPart($body_-text,'text/html');我看不出您是以何种方式使用库的,但您确定在您的竞赛中需要使用
$message->getBody()而不是
$message->setBody()这是从Laravel的事件触发中捕获的。我正在使用$message->getBody(),但由于某些原因,它返回null。我知道您正在尝试获取消息。您是否在使用库时设置了此消息?通过这种方式,
$message->setBody($body_-text),其中
$body_-text`可以作为您的模板,如果您使用的是我更喜欢的一种方式,`$message->addPart($body_-text,'text/html');