7
7
8
8
namespace Magento \Framework \Mail ;
9
9
10
+ use Magento \Framework \Exception \MailException ;
11
+ use Zend \Mail \Address as ZendAddress ;
10
12
use Zend \Mail \AddressList ;
11
13
use Zend \Mail \Message as ZendMessage ;
12
14
use Zend \Mime \Message as ZendMimeMessage ;
@@ -26,33 +28,46 @@ class EmailMessage implements EmailMessageInterface
26
28
*/
27
29
private $ mimeMessageFactory ;
28
30
31
+ /**
32
+ * @var MailAddressListFactory
33
+ */
34
+ private $ mailAddressListFactory ;
35
+
36
+ /**
37
+ * @var MailAddressFactory
38
+ */
39
+ private $ mailAddressFactory ;
40
+
29
41
/**
30
42
* EmailMessage constructor
31
43
*
32
44
* @param MimeMessageInterface $body
45
+ * @param MailAddressList $to
33
46
* @param MimeMessageInterfaceFactory $mimeMessageFactory
34
- * @param array|null $to
35
- * @param array|null $from
36
- * @param array |null $cc
37
- * @param array |null $bcc
38
- * @param array |null $replyTo
39
- * @param string |null $sender
40
- * @param string |null $senderName
47
+ * @param MailAddressListFactory $mailAddressListFactory
48
+ * @param MailAddressFactory $mailAddressFactory
49
+ * @param MailAddressList |null $from
50
+ * @param MailAddressList |null $cc
51
+ * @param MailAddressList |null $bcc
52
+ * @param MailAddressList |null $replyTo
53
+ * @param MailAddress |null $sender
41
54
* @param string|null $subject
42
55
* @param string|null $encoding
43
56
*
57
+ * @throws MailException
44
58
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
45
59
*/
46
60
public function __construct (
47
61
MimeMessageInterface $ body ,
62
+ MailAddressList $ to ,
48
63
MimeMessageInterfaceFactory $ mimeMessageFactory ,
49
- ? array $ to = [] ,
50
- ? array $ from = [] ,
51
- ?array $ cc = [] ,
52
- ?array $ bcc = [] ,
53
- ?array $ replyTo = [] ,
54
- ?string $ sender = '' ,
55
- ?string $ senderName = '' ,
64
+ MailAddressListFactory $ mailAddressListFactory ,
65
+ MailAddressFactory $ mailAddressFactory ,
66
+ ?MailAddressList $ from = null ,
67
+ ?MailAddressList $ cc = null ,
68
+ ?MailAddressList $ bcc = null ,
69
+ ?MailAddressList $ replyTo = null ,
70
+ ?MailAddress $ sender = null ,
56
71
?string $ subject = '' ,
57
72
?string $ encoding = ''
58
73
) {
@@ -67,14 +82,20 @@ public function __construct(
67
82
$ this ->message ->setSubject ($ subject );
68
83
}
69
84
if ($ sender ) {
70
- $ this ->message ->setSender ($ sender, $ senderName );
85
+ $ this ->message ->setSender ($ sender );
71
86
}
72
87
$ this ->message ->setReplyTo ($ replyTo );
88
+ if ($ to ->count () < 1 ) {
89
+ throw new MailException (__ ('Email message must have at list one addressee ' ));
90
+ }
91
+
73
92
$ this ->message ->setTo ($ to );
74
93
$ this ->message ->setFrom ($ from );
75
94
$ this ->message ->setCc ($ cc );
76
95
$ this ->message ->setBcc ($ bcc );
77
96
$ this ->mimeMessageFactory = $ mimeMessageFactory ;
97
+ $ this ->mailAddressListFactory = $ mailAddressListFactory ;
98
+ $ this ->mailAddressFactory = $ mailAddressFactory ;
78
99
}
79
100
80
101
/**
@@ -96,51 +117,60 @@ public function getHeaders(): array
96
117
/**
97
118
* @inheritDoc
98
119
*/
99
- public function getFrom (): array
120
+ public function getFrom (): ? MailAddressList
100
121
{
101
- return $ this ->convertAddressListToArray ($ this ->message ->getFrom ());
122
+ return $ this ->convertAddressListToMailAddressList ($ this ->message ->getFrom ());
102
123
}
103
124
104
125
/**
105
126
* @inheritDoc
106
127
*/
107
- public function getTo (): array
128
+ public function getTo (): MailAddressList
108
129
{
109
- return $ this ->convertAddressListToArray ($ this ->message ->getTo ());
130
+ return $ this ->convertAddressListToMailAddressList ($ this ->message ->getTo ());
110
131
}
111
132
112
133
/**
113
134
* @inheritDoc
114
135
*/
115
- public function getCc (): array
136
+ public function getCc (): ? MailAddressList
116
137
{
117
- return $ this ->convertAddressListToArray ($ this ->message ->getCc ());
138
+ return $ this ->convertAddressListToMailAddressList ($ this ->message ->getCc ());
118
139
}
119
140
120
141
/**
121
- * Retrieve list of BCC recipients
122
- *
123
- * @return array
142
+ * @inheritDoc
124
143
*/
125
- public function getBcc (): array
144
+ public function getBcc (): ? MailAddressList
126
145
{
127
- return $ this ->convertAddressListToArray ($ this ->message ->getBcc ());
146
+ return $ this ->convertAddressListToMailAddressList ($ this ->message ->getBcc ());
128
147
}
129
148
130
149
/**
131
150
* @inheritDoc
132
151
*/
133
- public function getReplyTo (): array
152
+ public function getReplyTo (): ? MailAddressList
134
153
{
135
- return $ this ->convertAddressListToArray ($ this ->message ->getReplyTo ());
154
+ return $ this ->convertAddressListToMailAddressList ($ this ->message ->getReplyTo ());
136
155
}
137
156
138
157
/**
139
158
* @inheritDoc
140
159
*/
141
- public function getSender (): ?string
160
+ public function getSender (): ?MailAddress
142
161
{
143
- return $ this ->message ->getSender ();
162
+ /** @var ZendAddress $zendSender */
163
+ if (!$ zendSender = $ this ->message ->getSender ()) {
164
+ return null ;
165
+ }
166
+
167
+ return $ this ->mailAddressFactory ->create (
168
+ [
169
+ 'email ' => $ zendSender ->getEmail (),
170
+ 'name ' => $ zendSender ->getName (),
171
+ 'comment ' => $ zendSender ->getComment ()
172
+ ]
173
+ );
144
174
}
145
175
146
176
/**
@@ -154,7 +184,7 @@ public function getSubject(): ?string
154
184
/**
155
185
* @inheritDoc
156
186
*/
157
- public function getBody (): ? MimeMessageInterface
187
+ public function getBody (): MimeMessageInterface
158
188
{
159
189
return $ this ->mimeMessageFactory ->create (
160
190
['parts ' => $ this ->message ->getBody ()->getParts ()]
@@ -178,9 +208,7 @@ public function getRawMessage(): string
178
208
}
179
209
180
210
/**
181
- * Serialize to string
182
- *
183
- * @return string
211
+ * @inheritDoc
184
212
*/
185
213
public function toString (): string
186
214
{
@@ -191,17 +219,23 @@ public function toString(): string
191
219
* Converts AddressList to array
192
220
*
193
221
* @param AddressList $addressList
194
- * @return array
222
+ * @return MailAddressList
223
+ * @throws MailException
195
224
*/
196
- private function convertAddressListToArray (AddressList $ addressList ): array
225
+ private function convertAddressListToMailAddressList (AddressList $ addressList ): MailAddressList
197
226
{
198
- $ arrayList = [];
199
- foreach ($ addressList as $ email => $ address ) {
200
- if ($ address ->getName ()) {
201
- $ arrayList [$ email ] = $ address ->getName ();
202
- } else {
203
- $ arrayList [] = $ address ->getEmail ();
204
- }
227
+ /** @var MailAddressList $arrayList */
228
+ $ arrayList = $ this ->mailAddressListFactory ->create ();
229
+ foreach ($ addressList as $ address ) {
230
+ $ arrayList ->add (
231
+ $ this ->mailAddressFactory ->create (
232
+ [
233
+ 'email ' => $ address ->getEmail (),
234
+ 'name ' => $ address ->getName (),
235
+ 'comment ' => $ address ->getComment ()
236
+ ]
237
+ )
238
+ );
205
239
}
206
240
207
241
return $ arrayList ;
0 commit comments