Changes for page Mail Sender API

Last modified by Admin on 2024/03/29 01:18

<
From version < 51.1 >
edited by Eduard Moraru
on 2017/12/06 14:22
To version < 52.1 >
edited by Eduard Moraru
on 2017/12/06 14:25
>
Change comment: Rollback to version 50.4

Summary

Details

ExtensionCode.ExtensionClass[0]
Description
... ... @@ -23,7 +23,7 @@
23 23  
24 24  == Create a Message ==
25 25  
26 -{{code language="velocity"}}
26 +{{code language="none"}}
27 27  // Message creation, internally creates a JavaMail MimeMessage
28 28  // Note that "from" is optional and if not specified, taken from Mail configuration, in the following order:
29 29  // - first a ##from## xproperty is looked for in a ##XWiki.SendMailConfigClass## xobject in the ##XWiki.MailConfig## page in the current wiki
... ... @@ -43,14 +43,217 @@
43 43  {{/info}}
44 44  
45 45  * Add Simple text:(((
46 -{{code language="velocity"}}
46 +{{code language="none"}}
47 47  $message.addPart("text/plain", "text message")
48 48  {{/code}}
49 49  )))
50 50  * Add simple text to message with a mail header:(((
51 -{{code }}
51 +{{code language="none"}}
52 +$message.addPart("text", "text message", {"headers" : { "Content-Transfer-Encoding" : "quoted-printable"}})
53 +{{/code}}
52 52  )))
55 +* Add simple HTML to message:(((
56 +{{code language="none"}}
57 +$message.addPart("text/html", "html message")
58 +{{/code}}
59 +)))
60 +* Add HTML + alternate text to message:(((
61 +{{code language="none"}}
62 +$message.addPart("text/html", "html message", {"alternate" : "text message"})
63 +{{/code}}
64 +)))
65 +* Add HTML + alternate text + embedded images + some attachments to message (Note: ##$attachments## is of type ##List<Attachment>## here).(((
66 +{{code language="none"}}
67 +$message.addPart("text/html", "html message", {"alternate" : "text message", "attachments" : $attachments})
68 +{{/code}}
69 +)))
70 +* Add HTML + alternate text from a Template Document containing a ##XWiki.Mail## object. Any ##$var1## Velocity variable is replaced with ##value1##.(((
71 +{{code language="none"}}
72 +$message.addPart("xwiki/template", $documentReference, {"velocityVariables" : { "var1" : "value1" }})
73 +{{/code}}
74 +)))
75 +* Same as previous addPart() example but also add internationalization support by retrieving the ##XWiki.Mail## Object which has a ##language## property equals to(((
76 +fr##{{code language="none"}}$message.addPart("xwiki/template", $documentReference, {"language" : "fr", "velocityVariables" : { "var1" : "value1" }}){{/code}}##
77 +)))
78 +* Add HTML + alternate text + embedded images + some attachments, from a Template Document containing a ##XWiki.Mail## object. Any ##$var1## Velocity variable is replaced with ##value1##. (Note: ##$attachments## is of type ##List<Attachment>## here).(((
79 +{{code language="none"}}
80 +$message.addPart("xwiki/template", $documentReference, {"velocityVariables" : { "var1" : "value1" }, "attachments" : $attachments})
81 +{{/code}}
82 +)))
83 +* Same as previous addPart() example but includes all attachments found in the Mail Template document instead of controlling precisely which attachments to send. Note that if you also pass ##"attachments" : $attachments## it'll not include by default the attachments found in the template.(((
84 +{{code language="none"}}
85 +$message.addPart("xwiki/template", $documentReference, {"includeTemplateAttachments" : true, "velocityVariables" : { "var1" : "value1" })
86 +{{/code}}
87 +)))
53 53  
89 +Note: ##addPart()## returns a ##BodyPart## object which can be used to set/get headers.
90 +
91 +== Send the Messages ==
92 +
93 +* Send a single Message, synchronously (it'll block till the mail is sent or it fails), storing the result in memory:(((
94 +{{code language="none"}}
95 +#set ($mailResult = $services.mailsender.send($message))
96 +{{/code}}
97 +)))
98 +* Send N messages, synchronously, storing the result in memory:(((
99 +{{code language="none"}}
100 +#set ($mailResult = $services.mailsender.send([$message1, $message2, ...]))
101 +
102 +// Equivalent to:
103 +#set ($mailResult = $services.mailsender.send([$message1, $message2, ...], 'memory'))
104 +{{/code}}
105 +)))
106 +* Send N message, asynchronously, storing the result in memory:(((
107 +{{code language="none"}}
108 +#set ($mailResult = $services.mailsender.sendAsynchronously([$message1, $message2, ...], 'memory'))
109 +{{/code}}
110 +)))
111 +* Send N messages, asynchronously, storing the results in the database. It can then be retrieved later on. The [[Mail Application]] has an Admin screen which lists the statuses of all mails sent like this. Note that this very useful especially when sending large volume of emails, to see which mails have succeeded and which mails have failed to be sent.(((
112 +{{code language="none"}}
113 +#set ($mailResult = $services.mailsender.sendAsynchronously([$message1, $message2, ...], 'database'))
114 +{{/code}}
115 +)))
116 +
117 +== Set the Type ==
118 +
119 +Sets the type of email that is being sent. This allows (for example) to filter these emails in the [[Mail Sender Status Admin UI>>Mail Application]] (when using a Database Mail Listener). Example of types: "Watchlist", "Reset Password", "Send Page by Mail", etc.
120 +
121 +{{code language="none"}}
122 +$message.setType("Some type")
123 +{{/code}}
124 +
125 +== Check Message Statuses ==
126 +
127 +When mails are sent asynchronously it's possible to check the status of the sending process by calling:
128 +
129 +(((
130 +{{info}}XWiki 7.1+{{/info}}:
131 +
132 +{{code language="none"}}
133 +// Returns true when the process is over for the batch (when all mails have been sent or have failed to be sent)
134 +$mailResult.statusResult.isProcessed()
135 +
136 +// Wait 10 seconds till the mails are sent (the passed timeout is expressed in milliseconds)
137 +// Note: Use "$mailResult.waitTillProcessed(10000L)" with XWiki < 7.1
138 +$mailResult.statusResult.waitTillProcessed(10000L)
139 +{{/code}}
140 +
141 +{{info}}XWiki < 7.1{{/info}}:
142 +
143 +{{code language="none"}}
144 +// Returns true when the process is over for the batch (when all mails have been sent or have failed to be sent)
145 +$mailResult.isProcessed()
146 +
147 +// Wait 10 seconds till the mails are sent (the passed timeout is expressed in milliseconds)
148 +// Note: Use "$mailResult.waitTillProcessed(10000L)" with XWiki < 7.1
149 +$mailResult.statusResult.waitTillProcessed(10000L)
150 +{{/code}}
151 +)))
152 +
153 +== Check for Errors ==
154 +
155 +* Checking for errors that can occur before the mails have been processed:(((
156 +{{code language="none"}}
157 +#if ($services.mailsender.lastError)
158 + {{error}}$exceptiontool.getStackTrace($services.mailsender.lastError){{/error}}
159 +#end
160 +{{/code}}
161 +
162 +This can happen for example under the following conditions:
163 +
164 +* If an error happened when creating the message(s) (when using the ##$services.mailsender.createMessage(...)## APIs)
165 +* If there isn't enough permission to send mail (for example if the page containing the sending script doesn't have Programming Rights)
166 +* If the Mail Listener referenced by the second parameter of ##$services.mailsender.send(messages, mailListenerHint)## doesn't exist
167 +)))
168 +
169 +* Checking for mails sent successfully:(((
170 +{{code language="none"}}
171 +#set ($mailStatuses = $mailResult.statusResult.getByState('SENT'))
172 +#foreach ($mailStatus in $mailStatuses)
173 + * Mail ($mailStatus.messageId) - Date Sent: $mailStatus.date
174 +#end
175 +{{/code}}
176 +)))
177 +* Checking for all mail statuses:(((
178 +{{code language="none"}}
179 +#set ($mailStatuses = $mailResult.statusResult.getAll())
180 +#foreach ($mailStatus in $mailStatuses)
181 + * Mail ($mailStatus.messageId) - Date Sent: $mailStatus.date State: $mailStatus.state - Error: $mailStatus.errorSummary
182 +#end
183 +{{/code}}
184 +
185 +{{info}}XWiki <7.1{{/info}}:
186 +
187 +* Checking for mails that have failed to be sent:(((
188 +{{code language="none"}}
189 +#set ($mailStatuses = $mailResult.statusResult.getByState('FAILED'))
190 +#foreach ($mailStatus in $mailStatuses)
191 +
192 + {{error}}
193 + $mailStatus.errorSummary
194 + $mailStatus.errorDescription
195 + {{/error}}
196 +
197 +#end
198 +{{/code}}
199 +)))
200 +
201 +{{info}}XWiki 7.1+{{/info}}:
202 +
203 +* Checking for mails that have failed to be sent:(((
204 +{{code language="none"}}
205 +#set ($mailStatuses = $mailResult.statusResult.getByState('SEND_ERROR'))
206 +#foreach ($mailStatus in $mailStatuses)
207 +
208 + {{error}}
209 + $mailStatus.errorSummary
210 + $mailStatus.errorDescription
211 + {{/error}}
212 +
213 +#end
214 +{{/code}}
215 +)))
216 +
217 +* Checking for mails that have failed to be prepared:(((
218 +{{code language="none"}}
219 +#set ($mailStatuses = $mailResult.statusResult.getByState('PREPARE_ERROR'))
220 +#foreach ($mailStatus in $mailStatuses)
221 +
222 + {{error}}
223 + $mailStatus.errorSummary
224 + $mailStatus.errorDescription
225 + {{/error}}
226 +
227 +#end
228 +{{/code}}
229 +)))
230 +
231 +* Checking for all mail statuses in error:(((
232 +{{code language="none"}}
233 +#set ($mailStatuses = $mailResult.statusResult.getAllErrors())
234 +#foreach ($mailStatus in $mailStatuses)
235 + * Mail ($mailStatus.messageId) - Date Sent: $mailStatus.date State: $mailStatus.state - Error: $mailStatus.errorSummary
236 +#end
237 +{{/code}}
238 +)))
239 +
240 +{{warning}}
241 +Checking statuses using ##getAll()##, ##getAllErrors()## or ##getByState()## is not scalable and should be used only when a small number of mails are sent at once. If you're sending a large number of mails, you should always use the ##database## Mail Listener and you should retrieve results using the Storage Script Service (see below).
242 +{{/warning}}
243 +
244 +== Accessing Configuration ==
245 +
246 +Access the Mail Sending configuration. In this example we define a default from email address if no from is defined on the configuration:
247 +
248 +(((
249 +{{code language="none"}}
250 +#set ($from = $services.mailsender.configuration.fromAddress)
251 +#if ("$!from" == '')
252 + #set ($from = "no-reply@${request.serverName}")
253 +#end
254 +{{/code}}
255 +)))
256 +
54 54  == MimeBodyPartFactory Implementations ==
55 55  
56 56  When adding a body part using the ##addPart(mimeType, source, ...)## script API, the following logic is used:
... ... @@ -62,7 +62,7 @@
62 62  The following implementations are available:
63 63  
64 64  * ##default##: Creates a text Message Body Part.
65 -* ##text/html##: Creates an HTML BodyPart that supports a text alternative and a list of attachments that will be added to the mail as standard attachments and also as embedded images if they are referenced in the passed HTML using the format {{code language="html"}}<img src="cid:(attachment name)"/>{{/code}}.
268 +* ##text/html##: Creates an HTML BodyPart that supports a text alternative and a list of attachments that will be added to the mail as standard attachments and also as embedded images if they are referenced in the passed HTML using the format {{code language="none"}}<img src="cid:(attachment name)"/>{{/code}}.
66 66  * ##xwiki/attachment##: Creates an attachment Body Part from an ##Attachment## object.
67 67  * ##xwiki/template##: Creates an Body Part from a Document Reference pointing to a Document containing an ##XWiki.Mail## XObject (the first one found is used). Note that when evaluating Velocity in Mail Templates, the Execution Context used is a clone of the one that was available when the ##send*(...)## method was called. Thus all Velocity bindings that were present are available from your Mail Template (##request##, ##xwiki##, ##services##, Velocity Tools, etc).
68 68  
... ... @@ -71,7 +71,7 @@
71 71  There are also specialized Message factories that can be used to create pre-filled Message objects. For example it's possible to create a message having its subject automatically computed from a template (i.e. from a wiki page having a ##XWiki.Mail## object), by evaluating its ##subject## xproperty with Velocity (see the example further below for more details) + having a template body part added too. Generic API:
72 72  
73 73  (((
74 -{{code language="velocity"}}
277 +{{code language="none"}}
75 75  #set ($message = $services.mailsender.createMessage(hint, source, parameters))
76 76  #set ($messages = $services.mailsender.createMessages(hint, source, parameters))
77 77  {{/code}}
... ... @@ -153,7 +153,7 @@
153 153  
154 154  This example uses a ##memory## Mail Listener.
155 155  
156 -{{code language="velocity"}}
359 +{{code language="none"}}
157 157  {{velocity}}
158 158  #set ($message = $services.mailsender.createMessage("[email protected]", "[email protected]", "subject"))
159 159  #set ($discard = $message.addPart("text/plain", "text content"))
... ... @@ -178,7 +178,7 @@
178 178  
179 179  The same example using a ##database## Mail Listener.
180 180  
181 -{{code language="velocity"}}
384 +{{code language="none"}}
182 182  {{velocity}}
183 183  #set ($message = $services.mailsender.createMessage("[email protected]", "[email protected]", "subject"))
184 184  #set ($discard = $message.addPart("text/plain", "text content"))
... ... @@ -205,7 +205,7 @@
205 205  
206 206  This example uses a ##memory## Mail Listener.
207 207  
208 -{{code language="velocity"}}
411 +{{code language="none"}}
209 209  {{velocity}}
210 210  #set ($message = $services.mailsender.createMessage("[email protected]", "[email protected]", "subject"))
211 211  #set ($discard = $message.addPart("text/plain", "text content"))
... ... @@ -247,7 +247,7 @@
247 247  
248 248  Add HTML + alternate text from a Template Document containing a ##XWiki.Mail## object. Use that template to generate both the mail subject and the mail content. Also pass the current language to support internationalization (the right ##XWiki.Mail## object will be used). Any ##$var1## Velocity variable is replaced with ##value1##.
249 249  
250 -{{code language="velocity"}}
453 +{{code language="none"}}
251 251  {{velocity}}
252 252  #set ($templateReference = $services.model.createDocumentReference('', 'Space', 'MailTemplatePage'))
253 253  #set ($mailParameters = {'language' : $xcontext.language, 'velocityVariables' : { 'var1' : 'value1' }})
... ... @@ -260,7 +260,7 @@
260 260  
261 261  It's also possible to pass "to", "from", "cc" and "bcc" in the parameter list:
262 262  
263 -{{code language="velocity"}}
466 +{{code language="none"}}
264 264  {{velocity}}
265 265  #set ($templateReference = $services.model.createDocumentReference('', 'Space', 'MailTemplatePage'))
266 266  #set ($mailParameters = {'from' : '[email protected]', 'to' : '[email protected]', 'language' : $xcontext.language, 'velocityVariables' : { 'var1' : 'value1' }})
... ... @@ -275,7 +275,7 @@
275 275  
276 276  Note that nested groups are handled (i.e. if the ##XWiki.MyGroup## group contains other groups, all users of those other groups will also receive the template email)!
277 277  
278 -{{code language="velocity"}}
481 +{{code language="none"}}
279 279  {{velocity}}
280 280  ## Parameters for the 'template' MimeMessageFactory
281 281  #set ($templateParameters = {'type' : 'Some type', 'language' : $xcontext.language, 'velocityVariables' : { 'var1' : 'value1' }})
... ... @@ -296,7 +296,7 @@
296 296  
297 297  It's also possible to exclude groups, users and email addresses:
298 298  
299 -{{code language="velocity"}}
502 +{{code language="none"}}
300 300  #set ($source = {'groups' : [$groupReference], 'users' : [$user1Reference, $user2Reference], 'emails' : ['[email protected]'], 'excludedUsers' : [], 'excludedEmails' : [], 'excludedGroups' : []})
301 301  {{/code}}
302 302  
... ... @@ -327,7 +327,7 @@
327 327  
328 328  {{info}}XWiki 7.1{{/info}} The following example is similar to the previous one, except that it use a fixed prepared mime message to send it to multiple users as separate independent message. (ie: all the users in the ##XWiki.MyGroup## group).
329 329  
330 -{{code language="velocity"}}
533 +{{code language="none"}}
331 331  {{velocity}}
332 332  ## Create a mime message, the way you like it, adding any part you like, without recipient.
333 333  #set ($message = $services.mailsender.createMessage('[email protected]', null, 'SendMimeMessageToGroup'))
... ... @@ -369,7 +369,7 @@
369 369  
370 370  Starting with XWiki 6.4M2 any document using the Scripting API will need to have Programming Rights by default to be allowed to send emails. This is configurable through the ##xwiki.properties## file:
371 371  
372 -{{code language="velocity"}}
575 +{{code language="none"}}
373 373  #-# [Since 6.4M2]
374 374  #-# Defines which authorization checks are done when sending mails using the Mail Sender Script Service.
375 375  #-# Example of valid values:
... ... @@ -403,7 +403,7 @@
403 403  
404 404  You might be tempted to write:
405 405  
406 -{{code language="velocity"}}
609 +{{code language="none"}}
407 407  $message.addPart("text/plain", "text message")
408 408  $message.addPart("text/html", "html message")"
409 409  {{/code}}
... ... @@ -410,7 +410,7 @@
410 410  
411 411  However this is not correct. You need to use the HTML Body Part Factory and pass the alternative in the parameters list as in:
412 412  
413 -{{code language="velocity"}}
616 +{{code language="none"}}
414 414  $message.addPart("text/html", "html message", {"alternate" : "text message"})
415 415  {{/code}}
416 416  
... ... @@ -454,5 +454,3 @@
454 454  {{/jira}}
455 455  )))
456 456  )))
457 -{{/code}}
458 -)))
Properties
... ... @@ -1,1 +1,5 @@
1 -maven.groupid=org.xwiki.platform maven.artifactid=xwiki-platform-mail-send-api maven.Model=org.xwiki.platform:xwiki-platform-mail-send-api:jar:9.10.1 xwiki.extension.recommendedVersions.platform=org.xwiki.commons:.*/[9.10.1], org.xwiki.rendering:.*/[9.10.1], org.xwiki.platform:.*/[9.10.1] xwiki.extension.recommendedVersions.commons=org.xwiki.commons:.*/[9.10.1] xwiki.extension.recommendedVersions=org.xwiki.commons:.*/[9.10.1], org.xwiki.rendering:.*/[9.10.1], org.xwiki.platform:.*/[9.10.1]
1 +maven.groupid=org.xwiki.platform maven.artifactid=xwiki-platform-mail-send-api maven.Model=org.xwiki.platform:xwiki-platform-mail-send-api:jar:9.10.1 xwiki.extension.recommendedVersions.platform=org.xwiki.commons:.*/[9.10.1],
2 + org.xwiki.rendering:.*/[9.10.1],
3 + org.xwiki.platform:.*/[9.10.1] xwiki.extension.recommendedVersions.commons=org.xwiki.commons:.*/[9.10.1] xwiki.extension.recommendedVersions=org.xwiki.commons:.*/[9.10.1],
4 + org.xwiki.rendering:.*/[9.10.1],
5 + org.xwiki.platform:.*/[9.10.1]
Recommended
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[84]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[85]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[86]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[87]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[88]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[89]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[90]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[91]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[92]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[93]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[94]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[95]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[96]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[97]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[98]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[99]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[100]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[101]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[102]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[103]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[104]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[105]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[106]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[107]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[108]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[109]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[110]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[111]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[112]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[113]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[114]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[115]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[116]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[117]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[118]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[119]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[120]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[121]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[122]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[123]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[124]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[125]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[126]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[127]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[128]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[129]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[130]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[131]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[132]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[133]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[134]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[135]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[136]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[137]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[138]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[139]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[140]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[141]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[142]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[143]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[144]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[145]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[146]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[147]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[148]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[149]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[150]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[151]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[152]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[153]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[154]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[155]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[156]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[157]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[158]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[159]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[160]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[161]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[162]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[163]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[164]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[165]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[166]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[167]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[168]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[169]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[170]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[171]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[172]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[173]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[174]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[175]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[176]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[177]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[178]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[179]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[180]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[181]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[182]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[183]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[184]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[185]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[186]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[187]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[188]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[189]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[190]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[191]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[192]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[193]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[194]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[195]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[196]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[197]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[198]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[199]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[200]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[201]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[202]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[203]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[204]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[205]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[206]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[207]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[208]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[209]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[210]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[211]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[212]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[213]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[214]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[215]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[216]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[217]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[218]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[219]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[220]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[221]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[222]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[223]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[224]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[225]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[226]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[227]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[228]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[229]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[230]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[231]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[232]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[233]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[234]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[235]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[236]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[237]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[238]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[239]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[240]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[241]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[242]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[243]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[244]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[245]
Optional
... ... @@ -1,1 +1,0 @@
1 -No
ExtensionCode.ExtensionDependencyClass[246]
Optional
... ... @@ -1,1 +1,0 @@
1 -No

Get Connected