@tiledesk/tiledesk-server 2.7.26 → 2.7.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +5 -0
- package/app.js +1 -1
- package/config/labels/widget.json +31 -0
- package/event/emailEvent.js +58 -2
- package/models/faq.js +5 -0
- package/models/kb_setting.js +38 -3
- package/package.json +4 -3
- package/pubmodules/s/index.js +2 -2
- package/pubmodules/s/models/subscription-payment.js +2 -2
- package/pubmodules/s/stripe/index.js +2 -2
- package/routes/kb.js +952 -542
- package/routes/openai.js +3 -3
- package/routes/project.js +21 -6
- package/routes/quotes.js +13 -4
- package/services/QuoteManager.js +163 -16
- package/services/emailService.js +53 -1
- package/services/requestService.js +16 -5
- package/template/email/beenInvitedNewUser.html +221 -216
- package/template/email/checkpointReachedEmail.html +92 -0
- package/test/kbRoute.js +1186 -311
- package/test/mock/projectMock.js +2 -3
- package/test/openaiRoute.js +3 -0
- package/test/requestService.js +3 -0
- package/utils/aiUtils.js +41 -5
@@ -1,230 +1,235 @@
|
|
1
|
-
<!DOCTYPE html
|
2
|
-
|
3
|
-
<html
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
|
3
|
+
<html
|
4
|
+
lang="en"
|
5
|
+
xmlns="http://www.w3.org/1999/xhtml"
|
6
|
+
style="
|
7
|
+
font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
8
|
+
box-sizing: border-box;
|
9
|
+
font-size: 14px;
|
10
|
+
margin: 0;
|
11
|
+
"
|
12
|
+
>
|
13
|
+
<head>
|
7
14
|
<meta name="viewport" content="width=device-width" />
|
8
15
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
9
|
-
<title>New
|
16
|
+
<title>New message from Tiledesk</title>
|
10
17
|
|
11
18
|
<style type="text/css">
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
19
|
+
img {
|
20
|
+
max-width: 100%;
|
21
|
+
margin-left: 16px;
|
22
|
+
text-align: center !important;
|
23
|
+
}
|
24
|
+
|
25
|
+
img.CToWUd {
|
26
|
+
margin-bottom: 16px;
|
27
|
+
max-width: 200px !important;
|
28
|
+
width: 200px !important;
|
29
|
+
min-width: 200px !important;
|
30
|
+
outline: none;
|
31
|
+
text-decoration: none;
|
32
|
+
border: none;
|
33
|
+
height: auto;
|
34
|
+
margin-left: 0px;
|
35
|
+
}
|
36
|
+
|
37
|
+
body {
|
38
|
+
background-color: #e2e7e9;
|
39
|
+
-webkit-font-smoothing: antialiased;
|
40
|
+
-webkit-text-size-adjust: none;
|
41
|
+
width: 100% !important;
|
42
|
+
height: 100%;
|
43
|
+
line-height: 1.6em;
|
44
|
+
padding: 30px 0px;
|
45
|
+
}
|
46
|
+
|
47
|
+
.box-container {
|
48
|
+
display: flex;
|
49
|
+
flex-direction: column;
|
50
|
+
justify-content: center;
|
51
|
+
align-items: center;
|
52
|
+
width: 100%;
|
53
|
+
margin-bottom: 30px;
|
54
|
+
/* position: fixed;
|
55
|
+
top: 90px; */
|
56
|
+
}
|
57
|
+
|
58
|
+
.box {
|
59
|
+
background-color: #fff;
|
60
|
+
width: 600px;
|
61
|
+
min-height: 400px;
|
62
|
+
border-radius: 8px;
|
63
|
+
}
|
64
|
+
|
65
|
+
.header-image {
|
66
|
+
background-image: url('https://img.freepik.com/vettori-premium/illustrazione-di-progettazione-del-pacchetto-piatto-di-finanza_205077-4142.jpg?w=2000');
|
67
|
+
background-size: cover;
|
68
|
+
background-repeat: no-repeat;
|
69
|
+
height: 200px;
|
70
|
+
width: 100%;
|
71
|
+
margin-bottom: 40px;
|
72
|
+
border-radius: 8px;
|
73
|
+
}
|
74
|
+
|
75
|
+
.header {
|
76
|
+
text-align: center;
|
77
|
+
}
|
78
|
+
|
79
|
+
h1 {
|
80
|
+
padding: 0px 40px;
|
81
|
+
}
|
82
|
+
|
83
|
+
.content-body {
|
84
|
+
padding: 10px 30px;
|
85
|
+
}
|
86
|
+
|
87
|
+
a {
|
88
|
+
/* box-sizing: border-box; */
|
89
|
+
font-size: 16px;
|
90
|
+
font-weight: 600;
|
91
|
+
color: #3c3c3c;
|
92
|
+
text-decoration: none;
|
93
|
+
margin: 0;
|
94
|
+
margin-bottom: 10px;
|
95
|
+
}
|
96
|
+
|
97
|
+
a:hover {
|
98
|
+
text-decoration: underline;
|
99
|
+
}
|
100
|
+
|
101
|
+
@media only screen and (max-width: 640px) {
|
102
|
+
body {
|
103
|
+
padding: 0 !important;
|
16
104
|
}
|
17
105
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
min-width: 200px !important;
|
23
|
-
outline: none;
|
24
|
-
text-decoration: none;
|
25
|
-
border: none;
|
26
|
-
height: auto;
|
27
|
-
margin-left: 0px;
|
106
|
+
h1 {
|
107
|
+
font-weight: 800 !important;
|
108
|
+
margin: 20px 0 5px !important;
|
109
|
+
text-align: center !important;
|
28
110
|
}
|
29
111
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
width: 100% !important;
|
34
|
-
height: 100%;
|
35
|
-
line-height: 1.6em;
|
112
|
+
h2 {
|
113
|
+
font-weight: 800 !important;
|
114
|
+
margin: 20px 0 5px !important;
|
36
115
|
}
|
37
116
|
|
38
|
-
|
39
|
-
|
117
|
+
h3 {
|
118
|
+
font-weight: 800 !important;
|
119
|
+
margin: 20px 0 5px !important;
|
120
|
+
}
|
121
|
+
|
122
|
+
h4 {
|
123
|
+
font-weight: 800 !important;
|
124
|
+
margin: 20px 0 5px !important;
|
125
|
+
}
|
126
|
+
|
127
|
+
h1 {
|
128
|
+
font-size: 22px !important;
|
129
|
+
}
|
130
|
+
|
131
|
+
h2 {
|
132
|
+
font-size: 18px !important;
|
133
|
+
}
|
134
|
+
|
135
|
+
h3 {
|
136
|
+
font-size: 16px !important;
|
137
|
+
}
|
138
|
+
|
139
|
+
.container {
|
140
|
+
padding: 0 !important;
|
141
|
+
width: 100% !important;
|
142
|
+
}
|
143
|
+
|
144
|
+
.content {
|
145
|
+
padding: 0 !important;
|
146
|
+
}
|
147
|
+
|
148
|
+
.content-wrap {
|
149
|
+
padding: 10px !important;
|
40
150
|
}
|
41
151
|
|
42
|
-
|
43
|
-
|
44
|
-
padding: 0 !important;
|
45
|
-
}
|
46
|
-
|
47
|
-
h1 {
|
48
|
-
font-weight: 800 !important;
|
49
|
-
margin: 20px 0 5px !important;
|
50
|
-
text-align: center !important;
|
51
|
-
}
|
52
|
-
|
53
|
-
h2 {
|
54
|
-
font-weight: 800 !important;
|
55
|
-
margin: 20px 0 5px !important;
|
56
|
-
}
|
57
|
-
|
58
|
-
h3 {
|
59
|
-
font-weight: 800 !important;
|
60
|
-
margin: 20px 0 5px !important;
|
61
|
-
}
|
62
|
-
|
63
|
-
h4 {
|
64
|
-
font-weight: 800 !important;
|
65
|
-
margin: 20px 0 5px !important;
|
66
|
-
}
|
67
|
-
|
68
|
-
h1 {
|
69
|
-
font-size: 22px !important;
|
70
|
-
}
|
71
|
-
|
72
|
-
h2 {
|
73
|
-
font-size: 18px !important;
|
74
|
-
}
|
75
|
-
|
76
|
-
h3 {
|
77
|
-
font-size: 16px !important;
|
78
|
-
}
|
79
|
-
|
80
|
-
.container {
|
81
|
-
padding: 0 !important;
|
82
|
-
width: 100% !important;
|
83
|
-
}
|
84
|
-
|
85
|
-
.content {
|
86
|
-
padding: 0 !important;
|
87
|
-
}
|
88
|
-
|
89
|
-
.content-wrap {
|
90
|
-
padding: 10px !important;
|
91
|
-
}
|
92
|
-
|
93
|
-
.invoice {
|
94
|
-
width: 100% !important;
|
95
|
-
}
|
152
|
+
.invoice {
|
153
|
+
width: 100% !important;
|
96
154
|
}
|
155
|
+
}
|
97
156
|
</style>
|
98
|
-
</head>
|
99
|
-
|
100
|
-
<body
|
101
|
-
style="
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
<
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
<tr
|
178
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
|
179
|
-
<td class="content-block"
|
180
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;"
|
181
|
-
valign="top">
|
182
|
-
</td>
|
183
|
-
</tr>
|
184
|
-
</table>
|
185
|
-
</td>
|
186
|
-
</tr>
|
187
|
-
|
188
|
-
<tr>
|
189
|
-
<td>
|
190
|
-
<hr style="width:94%;height:1px;border:none;background-color: #cacaca;">
|
191
|
-
|
192
|
-
<div style="display: flex; padding: 20px 18px; color: #888888; align-items: center;">
|
193
|
-
<span>Powered by </span>
|
194
|
-
<span style="display: flex;"><img
|
195
|
-
src="https://tiledesk.com/wp-content/uploads/2023/05/tiledesk-solo_logo_new_gray.png"
|
196
|
-
width="15" height="15" style="margin-left: 6px; margin-top: 2px;" /></span>
|
197
|
-
<span style="font-weight: bold; margin-left: 2px;">Tiledesk</span>
|
198
|
-
</div>
|
199
|
-
|
200
|
-
</td>
|
201
|
-
</tr>
|
202
|
-
|
203
|
-
</table>
|
204
|
-
<div class="footer"
|
205
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;">
|
206
|
-
<table width="100%"
|
207
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
|
208
|
-
<tr
|
209
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;">
|
210
|
-
<td class="aligncenter content-block"
|
211
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0;"
|
212
|
-
align="center" valign="top">
|
213
|
-
<span><a href="http://www.tiledesk.com"
|
214
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">
|
215
|
-
Tiledesk.com </a></span>
|
216
|
-
<br><span><a href="%unsubscribe_url%"
|
217
|
-
style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;">Unsubscribe</a></span>
|
218
|
-
</td>
|
219
|
-
</tr>
|
220
|
-
</table>
|
221
|
-
</div>
|
222
|
-
</div>
|
223
|
-
</td>
|
224
|
-
<td style="font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;"
|
225
|
-
valign="top"></td>
|
226
|
-
</tr>
|
227
|
-
</table>
|
228
|
-
</body>
|
229
|
-
|
230
|
-
</html>
|
157
|
+
</head>
|
158
|
+
|
159
|
+
<body>
|
160
|
+
<!-- <div style="background-color: #ff5757; height: 300px"></div>
|
161
|
+
<div style="background-color: #ffdfe0; height: 80px"></div> -->
|
162
|
+
<div class="box-container">
|
163
|
+
<div class="box">
|
164
|
+
<div class="header-image"></div>
|
165
|
+
|
166
|
+
<h1 style="text-align: center; color: #333">
|
167
|
+
Update on monthly resources usage
|
168
|
+
</h1>
|
169
|
+
|
170
|
+
<div class="content-body">
|
171
|
+
<p>Dear {{firstname}},</p>
|
172
|
+
|
173
|
+
<p>
|
174
|
+
This is to inform you that you reached the <b>{{checkpoint}}%</b> of your
|
175
|
+
monthly quote for <b>{{resource_name}}</b> on your project <b>{{project_name}}</b>.
|
176
|
+
</p>
|
177
|
+
|
178
|
+
<p>Below is a summary of the monthly resource usage:</p>
|
179
|
+
|
180
|
+
<table
|
181
|
+
style="width: 100%; border-collapse: collapse; margin-bottom: 20px"
|
182
|
+
>
|
183
|
+
<thead style="">
|
184
|
+
<tr>
|
185
|
+
<th style="border: 1px solid #ddd; padding: 8px">Resource</th>
|
186
|
+
<th style="border: 1px solid #ddd; padding: 8px">Quota</th>
|
187
|
+
<th style="border: 1px solid #ddd; padding: 8px">Usage</th>
|
188
|
+
</tr>
|
189
|
+
</thead>
|
190
|
+
<tbody style="text-align: center">
|
191
|
+
<tr>
|
192
|
+
<td style="border: 1px solid #ddd; padding: 8px">
|
193
|
+
Conversations
|
194
|
+
</td>
|
195
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{requests_quote}}</td>
|
196
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{requests_perc}}%</td>
|
197
|
+
</tr>
|
198
|
+
<tr>
|
199
|
+
<td style="border: 1px solid #ddd; padding: 8px">AI Tokens</td>
|
200
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{tokens_quote}}</td>
|
201
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{tokens_perc}}%</td>
|
202
|
+
</tr>
|
203
|
+
<tr>
|
204
|
+
<td style="border: 1px solid #ddd; padding: 8px">
|
205
|
+
Chatbot Email
|
206
|
+
</td>
|
207
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{email_quote}}</td>
|
208
|
+
<td style="border: 1px solid #ddd; padding: 8px">{{email_perc}}%</td>
|
209
|
+
</tr>
|
210
|
+
<!-- Add more rows for other resources as needed -->
|
211
|
+
</tbody>
|
212
|
+
</table>
|
213
|
+
</div>
|
214
|
+
|
215
|
+
<p style="text-align: center; font-size: 14px; color: #777">
|
216
|
+
This is an automated message. Please do not reply.
|
217
|
+
</p>
|
218
|
+
|
219
|
+
<div style="text-align: center; margin-top: 20px; padding: 20px">
|
220
|
+
<img
|
221
|
+
src="https://tiledesk.com/wp-content/uploads/2023/10/tiledesk-logo.png"
|
222
|
+
alt="Company Footer Logo"
|
223
|
+
style="max-width: 160px"
|
224
|
+
/>
|
225
|
+
</div>
|
226
|
+
|
227
|
+
</div>
|
228
|
+
</div>
|
229
|
+
|
230
|
+
<div class="box-container">
|
231
|
+
<a href="http://www.tiledesk.com" class="company-url">Tiledesk.com</a>
|
232
|
+
<a href="%unsubscribe_url%" class="unsubscribe">Unsubscribe</a>
|
233
|
+
</div>
|
234
|
+
</body>
|
235
|
+
</html>
|
@@ -0,0 +1,92 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
|
+
|
3
|
+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
4
|
+
|
5
|
+
<head>
|
6
|
+
<meta name="viewport" content="width=device-width" />
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
8
|
+
<title>New message from Tiledesk</title>
|
9
|
+
|
10
|
+
<style type="text/css">
|
11
|
+
/* Aggiungi qui gli stili CSS */
|
12
|
+
</style>
|
13
|
+
</head>
|
14
|
+
|
15
|
+
<body style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0; background-color: #e2e7e9; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; padding: 30px 0px;">
|
16
|
+
|
17
|
+
<table cellpadding="0" cellspacing="0" width="100%">
|
18
|
+
<tr>
|
19
|
+
<td align="center" valign="top">
|
20
|
+
<table cellpadding="0" cellspacing="0" width="600" style="background-color: #fff; border-radius: 8px;">
|
21
|
+
<tr>
|
22
|
+
<td style="padding: 0px 30px;">
|
23
|
+
<table cellpadding="0" cellspacing="0" width="100%">
|
24
|
+
<tr>
|
25
|
+
<td style="text-align: center;">
|
26
|
+
<img src="https://img.freepik.com/vettori-premium/illustrazione-di-progettazione-del-pacchetto-piatto-di-finanza_205077-4142.jpg?w=2000" alt="Header Image" style="width: 100%; max-height: 250px; border-radius: 8px;" />
|
27
|
+
</td>
|
28
|
+
</tr>
|
29
|
+
<tr>
|
30
|
+
<td style="text-align: center;">
|
31
|
+
<h1 style="color: #333;">Update on monthly resources usage</h1>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<tr>
|
35
|
+
<td style="padding: 10px 30px;">
|
36
|
+
<p>Dear {{firstname}},</p>
|
37
|
+
<p>This is to inform you that you reached the <b>{{checkpoint}}%</b> of your monthly quote for <b>{{resource_name}}</b> on your project <b>{{project_name}}</b>.</p>
|
38
|
+
<p>Below is a summary of the monthly resource usage:</p>
|
39
|
+
<table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; margin-bottom: 20px; text-align: center;">
|
40
|
+
<tr>
|
41
|
+
<th style="border: 1px solid #ddd; padding: 8px;">Resource</th>
|
42
|
+
<th style="border: 1px solid #ddd; padding: 8px;">Quota</th>
|
43
|
+
<th style="border: 1px solid #ddd; padding: 8px;">Usage</th>
|
44
|
+
</tr>
|
45
|
+
<tr>
|
46
|
+
<td style="border: 1px solid #ddd; padding: 8px;">Conversations</td>
|
47
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{requests_quote}}</td>
|
48
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{requests_perc}}%</td>
|
49
|
+
</tr>
|
50
|
+
<tr>
|
51
|
+
<td style="border: 1px solid #ddd; padding: 8px;">AI Tokens</td>
|
52
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{tokens_quote}}</td>
|
53
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{tokens_perc}}%</td>
|
54
|
+
</tr>
|
55
|
+
<tr>
|
56
|
+
<td style="border: 1px solid #ddd; padding: 8px;">Chatbot Email</td>
|
57
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{email_quote}}</td>
|
58
|
+
<td style="border: 1px solid #ddd; padding: 8px;">{{email_perc}}%</td>
|
59
|
+
</tr>
|
60
|
+
</table>
|
61
|
+
<p style="text-align: center; font-size: 14px; color: #777;">This is an automated message. Please do not reply.</p>
|
62
|
+
<div style="text-align: center; margin-top: 20px; padding: 20px;">
|
63
|
+
<img src="https://tiledesk.com/wp-content/uploads/2023/10/tiledesk-logo.png" alt="Company Footer Logo" style="max-width: 160px;" />
|
64
|
+
</div>
|
65
|
+
</td>
|
66
|
+
</tr>
|
67
|
+
</table>
|
68
|
+
</td>
|
69
|
+
</tr>
|
70
|
+
</table>
|
71
|
+
</td>
|
72
|
+
</tr>
|
73
|
+
<tr>
|
74
|
+
<td align="center" valign="top" style="padding-top: 20px;">
|
75
|
+
<table cellpadding="0" cellspacing="0" width="600">
|
76
|
+
<tr>
|
77
|
+
<td style="text-align: center; padding: 6px;">
|
78
|
+
<a href="http://www.tiledesk.com" style="font-size: 16px; font-weight: 500; color: #3c3c3c; text-decoration: none; margin: 0; margin-bottom: 10px;">Tiledesk.com</a><br />
|
79
|
+
</td>
|
80
|
+
</tr>
|
81
|
+
<tr>
|
82
|
+
<td style="text-align: center; padding: 6px;">
|
83
|
+
<a href="%unsubscribe_url%" style="font-size: 16px; font-weight: 500; color: #3c3c3c; text-decoration: none; margin: 0; margin-bottom: 10px;">Unsubscribe</a>
|
84
|
+
</td>
|
85
|
+
</tr>
|
86
|
+
</table>
|
87
|
+
</td>
|
88
|
+
</tr>
|
89
|
+
</table>
|
90
|
+
</body>
|
91
|
+
|
92
|
+
</html>
|