SocialSwiftMailer.php in Open Social 10.0.x
Same filename and directory in other branches
- 8.9 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.2 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.3 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.4 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.5 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.6 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.7 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 8.8 modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 10.3.x modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 10.1.x modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
- 10.2.x modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.php
Namespace
Drupal\social_swiftmail\Plugin\MailFile
modules/social_features/social_swiftmail/src/Plugin/Mail/SocialSwiftMailer.phpView source
<?php
namespace Drupal\social_swiftmail\Plugin\Mail;
use Drupal\Core\Asset\AttachedAssets;
use Drupal\Core\Render\Markup;
use Drupal\Core\Site\Settings;
use Drupal\mailsystem\MailsystemManager;
use Drupal\swiftmailer\Plugin\Mail\SwiftMailer;
use Html2Text\Html2Text;
use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles;
/**
* Provides a 'Forced HTML SwiftMailer' plugin to send emails.
*
* @Mail(
* id = "social_swiftmailer",
* label = @Translation("Social Swift Mailer"),
* description = @Translation("Forces the given body text to be HTML.")
* )
*/
class SocialSwiftMailer extends SwiftMailer {
/**
* {@inheritdoc}
*/
protected function massageMessageBody(array &$message, $is_html) {
$line_endings = Settings::get('mail_line_endings', PHP_EOL);
// Overwrite the Markup::Create of SwiftMailer.php.
// This to take in to account our tables / <br> and basically
// the custom HTML that is added within open social.
$message['body'] = Markup::create(implode($line_endings, array_map(function ($body) {
// If the field contains no html tags we can assume newlines will need be
// converted to <br>.
if (strlen(strip_tags($body)) === strlen($body)) {
$body = str_replace("\r", '', $body);
$body = str_replace("\n", '<br>', $body);
}
return check_markup($body, 'full_html');
}, $message['body'])));
// @see: SwiftMailer::massageMessageBody()
// Attempt to use the mail theme defined in MailSystem.
if ($this->mailManager instanceof MailsystemManager) {
$mail_theme = $this->mailManager
->getMailTheme();
}
else {
$mail_theme = $this->themeManager
->getActiveTheme()
->getName();
}
$render = [
'#theme' => $message['params']['theme'] ?? 'swiftmailer',
'#message' => $message,
'#is_html' => $is_html,
];
if ($is_html) {
$render['#attached']['library'] = [
"{$mail_theme}/swiftmailer",
];
}
$message['body'] = $this->renderer
->renderPlain($render);
if ($is_html) {
// Process CSS from libraries.
$assets = AttachedAssets::createFromRenderArray($render);
$css = '';
// Request optimization so that the CssOptimizer performs essential
// processing such as @include.
foreach ($this->assetResolver
->getCssAssets($assets, TRUE) as $css_asset) {
$css .= file_get_contents($css_asset['data']);
}
if ($css) {
$message['body'] = (new CssToInlineStyles())
->convert($message['body'], $css);
}
}
else {
// Convert to plain text.
$message['body'] = (new Html2Text($message['body']))
->getText();
}
}
}
Classes
Name![]() |
Description |
---|---|
SocialSwiftMailer | Provides a 'Forced HTML SwiftMailer' plugin to send emails. |