‪TYPO3CMS  ‪main
MailMessage.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
16 namespace ‪TYPO3\CMS\Core\Mail;
17 
18 use Symfony\Component\Mime\Address;
19 use Symfony\Component\Mime\Email;
21 
27 class ‪MailMessage extends Email
28 {
30 
34  protected bool ‪$sent = false;
35 
36  private function ‪initializeMailer(): void
37  {
38  // TODO: DI should be used to inject the MailerInterface
39  $this->mailer ??= GeneralUtility::makeInstance(MailerInterface::class);
40  }
41 
50  public function ‪send(): bool
51  {
52  $this->‪initializeMailer();
53  $this->sent = false;
54  $this->mailer->send($this);
55  $sentMessage = $this->mailer->getSentMessage();
56  if ($sentMessage) {
57  $this->sent = true;
58  }
59  return ‪$this->sent;
60  }
61 
65  public function ‪isSent(): bool
66  {
67  return ‪$this->sent;
68  }
69 
82  public function ‪setSubject($subject): self
83  {
84  return $this->subject($subject);
85  }
86 
92  public function ‪setDate($date): self
93  {
94  return $this->date((new \DateTime())->setTimestamp($date));
95  }
96 
102  public function ‪setReturnPath($address): self
103  {
104  return $this->returnPath($address);
105  }
106 
115  public function ‪setSender($address, $name = null): self
116  {
117  return $this->sender(...$this->‪convertNamedAddress($address, $name));
118  }
119 
132  public function ‪setFrom($addresses, $name = null): self
133  {
134  $this->‪checkArguments($addresses, $name);
135  return $this->from(...$this->‪convertNamedAddress($addresses, $name));
136  }
137 
150  public function ‪setReplyTo($addresses, $name = null): self
151  {
152  $this->‪checkArguments($addresses, $name);
153  return $this->replyTo(...$this->‪convertNamedAddress($addresses, $name));
154  }
155 
169  public function ‪setTo($addresses, $name = null): self
170  {
171  $this->‪checkArguments($addresses, $name);
172  return $this->to(...$this->‪convertNamedAddress($addresses, $name));
173  }
174 
188  public function ‪setCc($addresses, $name = null): self
189  {
190  $this->‪checkArguments($addresses, $name);
191  return $this->cc(...$this->‪convertNamedAddress($addresses, $name));
192  }
193 
207  public function ‪setBcc($addresses, $name = null): self
208  {
209  $this->‪checkArguments($addresses, $name);
210  return $this->bcc(...$this->‪convertNamedAddress($addresses, $name));
211  }
212 
216  public function ‪setReadReceiptTo(string $address): self
217  {
218  $this->getHeaders()->addMailboxHeader('Disposition-Notification-To', $address);
219  return $this;
220  }
221 
228  protected function ‪convertNamedAddress(...‪$args): array
229  {
230  if (isset(‪$args[1])) {
231  return [Address::create(sprintf('%s <%s>', ‪$args[1], ‪$args[0]))];
232  }
233  if (is_string(‪$args[0]) || is_array(‪$args[0])) {
234  return $this->‪convertAddresses(‪$args[0]);
235  }
236  return $this->‪convertAddresses(‪$args);
237  }
238 
245  protected function ‪convertAddresses($addresses): array
246  {
247  if (!is_array($addresses)) {
248  return [Address::create($addresses)];
249  }
250  $newAddresses = [];
251  foreach ($addresses as $email => $name) {
252  if (is_numeric($email) || ctype_digit($email)) {
253  $newAddresses[] = Address::create($name);
254  } else {
255  $newAddresses[] = Address::create(sprintf('%s <%s>', $name, $email));
256  }
257  }
258 
259  return $newAddresses;
260  }
261 
262  //
263  // Compatibility methods, as it was possible in TYPO3 v9 / SwiftMailer.
264  //
265 
266  public function ‪addFrom(Address|string|null|array ...$addresses): static
267  {
268  return parent::addFrom(...$this->‪convertNamedAddress(...$addresses));
269  }
270 
271  public function ‪addReplyTo(Address|string|null|array ...$addresses): static
272  {
273  return parent::addReplyTo(...$this->‪convertNamedAddress(...$addresses));
274  }
275 
276  public function ‪addTo(Address|string|null|array ...$addresses): static
277  {
278  return parent::addTo(...$this->‪convertNamedAddress(...$addresses));
279  }
280 
281  public function ‪addCc(Address|string|null|array ...$addresses): static
282  {
283  return parent::addCc(...$this->‪convertNamedAddress(...$addresses));
284  }
285 
286  public function ‪addBcc(Address|string|null|array ...$addresses): static
287  {
288  return parent::addBcc(...$this->‪convertNamedAddress(...$addresses));
289  }
290 
291  protected function ‪checkArguments($addresses, string $name = null): void
292  {
293  if ($name !== null && !is_string($addresses)) {
294  throw new \InvalidArgumentException('The combination of a name and an array of addresses is invalid.', 1570543657);
295  }
296  }
297 }
‪TYPO3\CMS\Core\Mail\MailMessage\initializeMailer
‪initializeMailer()
Definition: MailMessage.php:36
‪TYPO3\CMS\Core\Mail\MailMessage\setFrom
‪setFrom($addresses, $name=null)
Definition: MailMessage.php:132
‪TYPO3\CMS\Core\Mail\MailMessage
Definition: MailMessage.php:28
‪TYPO3\CMS\Core\Mail\MailerInterface
Definition: MailerInterface.php:28
‪TYPO3\CMS\Core\Mail\MailMessage\addFrom
‪addFrom(Address|string|null|array ... $addresses)
Definition: MailMessage.php:266
‪TYPO3\CMS\Core\Mail\MailMessage\convertNamedAddress
‪Address[] convertNamedAddress(... $args)
Definition: MailMessage.php:228
‪TYPO3\CMS\Core\Mail\MailMessage\setCc
‪setCc($addresses, $name=null)
Definition: MailMessage.php:188
‪TYPO3\CMS\Core\Mail\MailMessage\setReplyTo
‪setReplyTo($addresses, $name=null)
Definition: MailMessage.php:150
‪TYPO3\CMS\Core\Mail\MailMessage\addBcc
‪addBcc(Address|string|null|array ... $addresses)
Definition: MailMessage.php:286
‪TYPO3\CMS\Core\Mail\MailMessage\convertAddresses
‪Address[] convertAddresses($addresses)
Definition: MailMessage.php:245
‪TYPO3\CMS\Core\Mail\MailMessage\isSent
‪isSent()
Definition: MailMessage.php:65
‪TYPO3\CMS\Core\Mail\MailMessage\setTo
‪setTo($addresses, $name=null)
Definition: MailMessage.php:169
‪TYPO3\CMS\Core\Mail\MailMessage\addReplyTo
‪addReplyTo(Address|string|null|array ... $addresses)
Definition: MailMessage.php:271
‪TYPO3\CMS\Core\Mail\MailMessage\setBcc
‪setBcc($addresses, $name=null)
Definition: MailMessage.php:207
‪TYPO3\CMS\Core\Mail\MailMessage\$sent
‪bool $sent
Definition: MailMessage.php:34
‪TYPO3\CMS\Core\Mail\MailMessage\setDate
‪setDate($date)
Definition: MailMessage.php:92
‪$args
‪$args
Definition: validateRstFiles.php:258
‪TYPO3\CMS\Core\Mail\MailMessage\checkArguments
‪checkArguments($addresses, string $name=null)
Definition: MailMessage.php:291
‪TYPO3\CMS\Core\Mail\MailMessage\setSender
‪setSender($address, $name=null)
Definition: MailMessage.php:115
‪TYPO3\CMS\Core\Mail\MailMessage\setSubject
‪setSubject($subject)
Definition: MailMessage.php:82
‪TYPO3\CMS\Core\Mail\MailMessage\setReturnPath
‪setReturnPath($address)
Definition: MailMessage.php:102
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Mail
Definition: DelayedTransportInterface.php:18
‪TYPO3\CMS\Core\Mail\MailMessage\addCc
‪addCc(Address|string|null|array ... $addresses)
Definition: MailMessage.php:281
‪TYPO3\CMS\Core\Mail\MailMessage\setReadReceiptTo
‪setReadReceiptTo(string $address)
Definition: MailMessage.php:216
‪TYPO3\CMS\Core\Mail\MailMessage\$mailer
‪MailerInterface $mailer
Definition: MailMessage.php:29
‪TYPO3\CMS\Core\Mail\MailMessage\addTo
‪addTo(Address|string|null|array ... $addresses)
Definition: MailMessage.php:276
‪TYPO3\CMS\Core\Mail\MailMessage\send
‪bool send()
Definition: MailMessage.php:50