Как получить контент по электронной почте HTML перед отправкой?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как получить контент по электронной почте HTML перед отправкой?

Сообщение Anonymous »

Я хочу заменить все ссылки в электронном письме HTML на трекер. Насколько я знаю, это событие Event_before_send . Поэтому я создал некоторое поведение, которое можно использовать, как ниже < /p>

$mailer = \Yii::$app->mailer;
/* @var $mailer \yii\mail\BaseMailer */
$mailer->attachBehavior('archiver', [
'class' => \app\MailTracker::class
]);
< /code>

Вот содержимое класса MyTracker < /code>. < /p>

class MailTracker extends Behavior {
public function events() {
return [
\yii\mail\BaseMailer::EVENT_BEFORE_SEND => 'trackMail',
];
}

/**
* @param \yii\mail\MailEvent $event
*/
public function trackMail($event) {
$message = $event->message;

$htmlOutput = $this->how_do_i_get_the_html_output();
$changedOutput = $this->changeLinkWithTracker($htmlOutput);
$message->getHtmlBody($changedOutput);
}
}
< /code>

Проблема теперь состоит в том, что \ yii \ mail \ basemailer < /code> не предоставляет метод, чтобы получить вывод HTML перед отправкой. < /p>

Как это сделать? через этот хакерский путь. < /p>

/* @var $message \yii\swiftmailer\Message */
if ($message instanceof \yii\swiftmailer\Message) {
$swiftMessage = $message->getSwiftMessage();
$r = new \ReflectionObject($swiftMessage);
$parentClassThatHasBody = $r->getParentClass()
->getParentClass()
->getParentClass(); //\Swift_Mime_SimpleMimeEntity
$body = $parentClassThatHasBody->getProperty('_immediateChildren');
$body->setAccessible(true);
$children = $body->getValue($swiftMessage);
foreach ($children as $child) {
if ($child instanceof \Swift_MimePart &&
$child->getContentType() == 'text/html') {
$html = $child->getBody();
break;
}
}
print_r($html);
}


Подробнее здесь: https://stackoverflow.com/questions/287 ... re-sending
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»