embulk-output-send_email 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1716bea4b5e03700b482a7ee032641414997d7efd41fdbc21a97164b9d5b2107
4
- data.tar.gz: ceccacbdc073937e7bc499aaf6027ef280a0d88b9924e482fb58ecd33c73fffe
3
+ metadata.gz: 565e2d3115226a136176238f1322ab0ffda4a1f21b0ec7b8b659bd3ffbf62bf9
4
+ data.tar.gz: a01f710bc533ce9c19cd3d9fcc79fbc3eac18ab0387f1f27a96cc10dec6fda20
5
5
  SHA512:
6
- metadata.gz: d5a36fe13fa03476bbfaa35aefc5a9e52384588bda37686d7fdf54c1b53057c12d850a51398497e957487aa461869cf614014c57d44df70878595068d1b9c6d2
7
- data.tar.gz: 982b638b0c4bdf2533660d1350806db0b5e074c459536359b75e35764666bc8a7335f1dccbaa85877c3659f81184902d2cec2cc60da6b41894611f6d31610127
6
+ metadata.gz: 86067228fef4d332766c6751257f23740e71072ad03a022bf5ea2951bb23de080f82f1862e73b30115be78cc6b5cdfbfd678e9093ca2c264843ab417b88be701
7
+ data.tar.gz: fd79d8cf1e01ad6ea70c3af9f32509f58df32341f9b03448af1dd173dad94fb62fe17a08ceed9d5808ec257c5633f2a46df372968cd68643bba6dbced0b3bdfc
File without changes
data/README.md CHANGED
@@ -1,74 +1,84 @@
1
- #Send email output plugin for Embulk
2
-
3
- An output plugin for Embulk to send email with data
4
-
5
- ## Configuration
6
-
7
- - **send_email**: Required attribute for this output plugin
8
- - **to**: To whom you want to send email mention the email ID(required)
9
- - **from**: From which email ID you want to send (required)
10
- - **password**: Password of your email ID from which you want to send (required)
11
- - **port**: Port of email (for gmail its `587`)(required)
12
- - **host**: Host of your email (For gmail `smtp.gmail.com`) (required)
13
- - **row**: How many row you want to send with email mention like 1,2,3(required)
14
- - **filetype**: Mention file type like (example: json,html) (required)
15
-
16
- ## Example - columns
17
-
18
- Say input.csv is as follows:
19
-
20
-
21
- ```
22
- year country_code country_name literacy_rate
23
-
24
- 1990 1 India 80%
25
- 1993 2 USA 83%
26
- 1997 3 JAPAN
27
- 1999 4 China 72%
28
- 2000 5 Ukraine 68%
29
- 2002 6 Italy 79%
30
- 2004 7 UK 75%
31
- 2011 8 NULL 42%
32
- ```
33
-
34
-
35
-
36
- ```yaml
37
- out:
38
- type: send_email
39
- to: abc@example.com
40
- from: abc@example.com
41
- password: XXXXXX
42
- port: 587
43
- host: smtp.gmail.com
44
- row: 3
45
- filetype: html
46
- ```
47
-
48
-
49
- ## Development
50
-
51
- Run example:
52
-
53
- ```
54
- $ ./gradlew package
55
- $ embulk run -I ./lib seed.yml
56
- ```
57
-
58
- Deployment Steps:
59
-
60
- ```
61
- Install ruby in your machine
62
- $ gem install gemcutter (For windows OS)
63
-
64
- $ ./gradlew gemPush
65
- $ gem build NameOfYourPlugins (example: embulk-output-send_email)
66
- $ gem push embulk-output-send_email-0.1.0.gem (You will get this name after running above command)
67
- ```
68
-
69
-
70
- Release gem:
71
-
72
- ```
73
- $ ./gradlew gemPush
74
- ```
1
+ <p align="center">
2
+ <a href="https://www.infoobjects.com/" target="blank"><img src="screenshots/logo.png" width="150" alt="InfoObjects Logo" /></a>
3
+ </p>
4
+ <p align="center">Infoobjects is a consulting company that helps enterprises transform how and where they run applications and infrastructure.
5
+ From strategy, to implementation, to ongoing managed services, Infoobjects creates tailored cloud solutions for enterprises at all stages of the cloud journey.</p>
6
+
7
+ #Send email output plugin for Embulk
8
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
9
+
10
+ An output plugin for Embulk to send email with data
11
+
12
+ ## Configuration
13
+
14
+ - **send_email**: Required attribute for this output plugin
15
+ - **to**: To whom you want to send email mention the email ID(required)
16
+ - **from**: From which email ID you want to send (required)
17
+ - **password**: Password of your email ID from which you want to send (required)
18
+ - **port**: Port of email (for gmail its `587`)(required)
19
+ - **host**: Host of your email (For gmail `smtp.gmail.com`) (required)
20
+ - **row**: How many row you want to send with email mention like 1,2,3(required)
21
+ - **file_type**: Mention file type like (example: json,html) (required)
22
+
23
+ ## Example - columns
24
+
25
+ Say input.csv is as follows:
26
+
27
+
28
+ ```
29
+ year country_code country_name literacy_rate
30
+
31
+ 1990 1 India 80%
32
+ 1993 2 USA 83%
33
+ 1997 3 JAPAN
34
+ 1999 4 China 72%
35
+ 2000 5 Ukraine 68%
36
+ 2002 6 Italy 79%
37
+ 2004 7 UK 75%
38
+ 2011 8 NULL 42%
39
+ ```
40
+
41
+
42
+
43
+ ```yaml
44
+ out:
45
+ type: send_email
46
+ to: abc@example.com
47
+ from: abc@example.com
48
+ password: XXXXXX
49
+ port: 587
50
+ host: smtp.gmail.com
51
+ row: 3
52
+ filetype: html
53
+ ```
54
+
55
+
56
+ ## Development
57
+
58
+ Run example:
59
+
60
+ ```
61
+ $ ./gradlew package
62
+ $ embulk run -I ./lib seed.yml
63
+ ```
64
+
65
+ Deployment Steps:
66
+
67
+ ```
68
+ Install ruby in your machine
69
+ $ gem install gemcutter (For windows OS)
70
+
71
+ $ ./gradlew gemPush
72
+ $ gem build NameOfYourPlugins (example: embulk-output-send_email)
73
+ $ gem push embulk-output-send_email-0.1.0.gem (You will get this name after running above command)
74
+ ```
75
+
76
+
77
+ Release gem:
78
+
79
+ ```
80
+ $ ./gradlew gemPush
81
+ ```
82
+ ## Licensing
83
+
84
+ InfoObjects [license](LICENSE) (MIT License)
data/build.gradle CHANGED
@@ -13,7 +13,7 @@ configurations {
13
13
  provided
14
14
  }
15
15
 
16
- version = "0.1.0"
16
+ version = "0.1.1"
17
17
 
18
18
  sourceCompatibility = 1.8
19
19
  targetCompatibility = 1.8
Binary file
data/example/config.yml CHANGED
@@ -3,7 +3,7 @@ exec:
3
3
  min_output_tasks: 4
4
4
  in:
5
5
  type: file
6
- path_prefix: C:\Users\Abhishek Gupta\Desktop\new one\embulk-output-send_email\calendar.csv
6
+ path_prefix: /home/infoobjects/Downloads/sample/calendar.csv
7
7
  parser:
8
8
  type: csv
9
9
  columns:
@@ -22,12 +22,22 @@ filters:
22
22
  - {name: attr3, type: string}
23
23
  out:
24
24
  type: send_email
25
- to: abc@example.com
26
- from: abc@example.com
27
- password: XXXXX
25
+ to:
26
+ - ankit.kumar@infoobjects.com
27
+ - abhishek.gupta@infoobjects.com
28
+ cc:
29
+ - abhishek.gupta@infoobjects.com
30
+ - ankit.navral@infoobjects.com
31
+ from: ankit.navral@infoobjects.com
32
+ # password: 12334
28
33
  port: 587
34
+ username: ankit.navral@infoobjects.com
29
35
  host: smtp.gmail.com
30
- row: 3
31
- filetype: html
36
+ subject: XYZ123
37
+ # row: 3
38
+ file_type: html
39
+ protocol: TLSv1.2
40
+ auth: true
41
+ smtp_enable: true
32
42
 
33
43
 
Binary file
@@ -1,286 +1,321 @@
1
- package org.embulk.output.send_email;
2
-
3
-
4
- import java.util.*;
5
- import com.fasterxml.jackson.databind.ObjectMapper;
6
- import org.embulk.config.*;
7
- import org.embulk.spi.*;
8
- import javax.mail.*;
9
- import javax.mail.internet.InternetAddress;
10
- import javax.mail.internet.MimeBodyPart;
11
- import javax.mail.internet.MimeMessage;
12
- import javax.mail.internet.MimeMultipart;
13
-
14
- public class SendEmailOutputPlugin
15
- implements OutputPlugin {
16
- public interface PluginTask
17
- extends Task {
18
-
19
- @Config("filetype")
20
- @ConfigDefault("\"json\"")
21
- public String getFileType();
22
-
23
- @Config("to")
24
- public String getTO();
25
-
26
- @Config("from")
27
- public String getFrom();
28
-
29
- @Config("password")
30
- public String getPassword();
31
-
32
- @Config("port")
33
- public String getPort();
34
-
35
- @Config("host")
36
- public String getHost();
37
-
38
- @Config("row")
39
- @ConfigDefault("-1")
40
- public int getRow();
41
-
42
- }
43
-
44
-
45
- @Override
46
- public ConfigDiff transaction(ConfigSource config,
47
- Schema schema, int taskCount,
48
- OutputPlugin.Control control) {
49
- PluginTask task = config.loadConfig(PluginTask.class);
50
- control.run(task.dump());
51
- return Exec.newConfigDiff();
52
- }
53
-
54
- @Override
55
- public ConfigDiff resume(TaskSource taskSource,
56
- Schema schema, int taskCount,
57
- OutputPlugin.Control control) {
58
- throw new UnsupportedOperationException("myp output plugin does not support resuming");
59
- }
60
-
61
-
62
-
63
- @Override
64
- public void cleanup(TaskSource taskSource,
65
- Schema schema, int taskCount,
66
- List<TaskReport> successTaskReports) {
67
- }
68
-
69
- @Override
70
- public TransactionalPageOutput open(TaskSource taskSource, Schema schema, int taskIndex) {
71
- PageReader pageReader;
72
- PluginTask task = taskSource.loadTask(PluginTask.class);
73
- pageReader = new PageReader(schema);
74
- return new PageTransactionalOutput(task, pageReader, schema);
75
- }
76
-
77
- public static class PageTransactionalOutput implements TransactionalPageOutput {
78
- PluginTask task;
79
- PageReader pageReader;
80
- Schema schema;
81
-
82
- public PageTransactionalOutput(PluginTask task, PageReader pageReader, Schema schema) {
83
- this.task = task;
84
- this.pageReader = pageReader;
85
- this.schema = schema;
86
- }
87
-
88
- @Override
89
- public void add(Page page) {
90
- ArrayList<LinkedHashMap<String, Object>> mapList = new ArrayList<>();
91
-
92
- pageReader.setPage(page);
93
- int rows = task.getRow();
94
- if (task.getRow() == -1) {
95
- rows = Integer.MAX_VALUE;
96
- }
97
-
98
- readingAndSettingDataToMap(pageReader, rows, mapList);
99
- pageReader.close();
100
- try {
101
- Transport.send(prepareMessage(getSession(task), task.getFrom(), task.getTO(), mapList, schema, task));
102
- } catch (Exception e) {
103
- e.printStackTrace();
104
- throw new RuntimeException(e);
105
- }
106
- }
107
-
108
- private void readingAndSettingDataToMap(PageReader pageReader, int rows, ArrayList<LinkedHashMap<String, Object>> mapList) {
109
- while (pageReader.nextRecord() && rows-- > 0) {
110
- LinkedHashMap<String, Object> map = new LinkedHashMap<>();
111
-
112
- pageReader.getSchema().visitColumns(new ColumnVisitor() {
113
- @Override
114
- public void booleanColumn(Column column) {
115
- if (pageReader.isNull(column)) {
116
- map.put(column.getName(), "");
117
- } else {
118
- map.put(column.getName(), pageReader.getBoolean(column));
119
- }
120
- }
121
-
122
- @Override
123
- public void longColumn(Column column) {
124
- if (pageReader.isNull(column)) {
125
- map.put(column.getName(), "");
126
- } else {
127
- map.put(column.getName(), pageReader.getLong(column));
128
- }
129
- }
130
-
131
- @Override
132
- public void doubleColumn(Column column) {
133
- if (pageReader.isNull(column)) {
134
- map.put(column.getName(), "");
135
- } else {
136
- map.put(column.getName(), pageReader.getDouble(column));
137
- }
138
-
139
- }
140
-
141
- @Override
142
- public void stringColumn(Column column) {
143
- if (pageReader.isNull(column)) {
144
- map.put(column.getName(), "");
145
- } else {
146
- map.put(column.getName(), pageReader.getString(column));
147
- }
148
- }
149
-
150
- @Override
151
- public void timestampColumn(Column column) {
152
- if (pageReader.isNull(column)) {
153
- map.put(column.getName(), "");
154
- } else {
155
- map.put(column.getName(), pageReader.getTimestamp(column));
156
- }
157
-
158
- }
159
-
160
- @Override
161
- public void jsonColumn(Column column) {
162
- if (pageReader.isNull(column)) {
163
- map.put(column.getName(), "");
164
- } else {
165
- map.put(column.getName(), pageReader.getJson(column));
166
- }
167
-
168
- }
169
- });
170
- mapList.add(map);
171
- }
172
- }
173
-
174
- private Session getSession(PluginTask task) {
175
- try {
176
- Properties properties = new Properties();
177
- properties.put("mail.smtp.starttls.enable", "true");
178
- properties.put("mail.smtp.ssl.protocols", "TLSv1.2");
179
- properties.put("mail.smtp.host", task.getHost());
180
- properties.put("mail.smtp.port", task.getPort());
181
- properties.put("mail.smtp.auth", "true");
182
-
183
- return Session.getInstance(properties, new javax.mail.Authenticator() {
184
- protected PasswordAuthentication getPasswordAuthentication() {
185
- return new PasswordAuthentication(task.getFrom(), task.getPassword());
186
- }
187
- });
188
- } catch (Exception e) {
189
- e.printStackTrace();
190
- throw e;
191
- }
192
- }
193
-
194
- private static Message prepareMessage(Session session, String myAccountEmail, String recepeint, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema, PluginTask task) {
195
- try {
196
- Message message = new MimeMessage(session);
197
- message.setFrom(new InternetAddress(myAccountEmail));
198
- message.setRecipient(Message.RecipientType.TO, new InternetAddress(recepeint));
199
- message.setSubject("Message from email plugin.");
200
-
201
- if (task.getFileType().equalsIgnoreCase("html")) {
202
- setHtmlContent(message, mapList, schema);
203
- } else if (task.getFileType().equalsIgnoreCase("json")) {
204
- setJsonContent(message, mapList, schema);
205
- }
206
- return message;
207
- } catch (Exception e) {
208
- e.printStackTrace();
209
- throw new RuntimeException(e);
210
- }
211
- }
212
-
213
- private static void setHtmlContent(Message message, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema) {
214
-
215
- try {
216
- MimeMultipart multipart = new MimeMultipart();
217
- BodyPart messageBodyPart = new MimeBodyPart();
218
- StringBuilder email = new StringBuilder();
219
-
220
- email.append("<!DOCTYPE html><html><body>"
221
- + "<table style='border:1px solid #96D4D4;border-collapse: collapse;width: 100%'>");
222
-
223
- email.append("<tr>");
224
- for (int i = 0; i < schema.size(); i++) {
225
- email.append("<th style='border:2px solid black; border-collapse: collapse;border-color: #96D4D4'>");
226
- email.append(schema.getColumn(i).getName().split("/")[0]);
227
- email.append("</th>");
228
- }
229
- email.append("</tr>");
230
-
231
- for (int i = 0; i < mapList.size(); i++) {
232
- Map<String, Object> map = mapList.get(i);
233
- email.append("<tr >");
234
- for (Map.Entry<String, Object> entry : map.entrySet()) {
235
- email.append("<td style='border:1px solid black;border-collapse: collapse;text-align:center;border-color: #96D4D4'>");
236
- email.append(entry.getValue());
237
- email.append("</td>");
238
- }
239
- email.append("<tr>");
240
- }
241
- email.append("</table></body></html>");
242
-
243
- messageBodyPart.setContent(email.toString(), "text/html");
244
- multipart.addBodyPart(messageBodyPart);
245
- message.setContent(multipart);
246
- } catch (Exception e) {
247
- System.out.println("Not able to send data");
248
- throw new RuntimeException(e);
249
- }
250
-
251
- }
252
-
253
- private static void setJsonContent(Message message, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema) {
254
- try {
255
- ObjectMapper objectMapper = new ObjectMapper();
256
- String value = null;
257
- value = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(mapList);
258
- message.setText(value);
259
- } catch (Exception e) {
260
- e.printStackTrace();
261
- throw new RuntimeException(e);
262
- }
263
-
264
- }
265
-
266
- @Override
267
- public void finish() {
268
-
269
- }
270
-
271
- @Override
272
- public void close() {
273
-
274
- }
275
-
276
- @Override
277
- public void abort() {
278
-
279
- }
280
-
281
- @Override
282
- public TaskReport commit() {
283
- return null;
284
- }
285
- }
286
- }
1
+ package org.embulk.output.send_email;
2
+
3
+
4
+ import java.util.*;
5
+ import java.util.stream.Collectors;
6
+
7
+ import com.fasterxml.jackson.databind.ObjectMapper;
8
+ import org.embulk.config.*;
9
+ import org.embulk.spi.*;
10
+ import javax.mail.*;
11
+ import javax.mail.internet.InternetAddress;
12
+ import javax.mail.internet.MimeBodyPart;
13
+ import javax.mail.internet.MimeMessage;
14
+ import javax.mail.internet.MimeMultipart;
15
+
16
+ public class SendEmailOutputPlugin
17
+ implements OutputPlugin {
18
+ public interface PluginTask
19
+ extends Task {
20
+
21
+ @Config("file_type")
22
+ @ConfigDefault("\"json\"")
23
+ public String getFileType();
24
+
25
+ @Config("to")
26
+ public List<String> getTO();
27
+
28
+
29
+ @Config("cc")
30
+ public List<String> getCC();
31
+
32
+ @Config("from")
33
+ public String getFrom();
34
+
35
+ @Config("password")
36
+ @ConfigDefault("\"pass-word\"")
37
+ public String getPassword();
38
+
39
+ @Config("port")
40
+ public String getPort();
41
+
42
+ @Config("subject")
43
+ public String getSubject();
44
+
45
+ @Config("auth")
46
+ @ConfigDefault("false")
47
+ public boolean getAuth();
48
+
49
+ @Config("host")
50
+ public String getHost();
51
+
52
+ @Config("protocol")
53
+ @ConfigDefault("TLSv1.2")
54
+ public String getProtocol();
55
+
56
+ @Config("row")
57
+ @ConfigDefault("-1")
58
+ public int getRow();
59
+
60
+ @Config("username")
61
+ @ConfigDefault("")
62
+ public String getUserName();
63
+
64
+ @Config("smtp_enable")
65
+ @ConfigDefault("true")
66
+ public String getSmtpEnable();
67
+ }
68
+
69
+ @Override
70
+ public ConfigDiff transaction(ConfigSource config,
71
+ Schema schema, int taskCount,
72
+ OutputPlugin.Control control) {
73
+ PluginTask task = config.loadConfig(PluginTask.class);
74
+ control.run(task.dump());
75
+ return Exec.newConfigDiff();
76
+ }
77
+
78
+ @Override
79
+ public ConfigDiff resume(TaskSource taskSource,
80
+ Schema schema, int taskCount,
81
+ OutputPlugin.Control control) {
82
+ throw new UnsupportedOperationException("myp output plugin does not support resuming");
83
+ }
84
+
85
+
86
+
87
+ @Override
88
+ public void cleanup(TaskSource taskSource,
89
+ Schema schema, int taskCount,
90
+ List<TaskReport> successTaskReports) {
91
+ }
92
+
93
+ @Override
94
+ public TransactionalPageOutput open(TaskSource taskSource, Schema schema, int taskIndex) {
95
+ PageReader pageReader;
96
+ PluginTask task = taskSource.loadTask(PluginTask.class);
97
+ pageReader = new PageReader(schema);
98
+ return new PageTransactionalOutput(task, pageReader, schema);
99
+ }
100
+
101
+ public static class PageTransactionalOutput implements TransactionalPageOutput {
102
+ PluginTask task;
103
+ PageReader pageReader;
104
+ Schema schema;
105
+
106
+ public PageTransactionalOutput(PluginTask task, PageReader pageReader, Schema schema) {
107
+ this.task = task;
108
+ this.pageReader = pageReader;
109
+ this.schema = schema;
110
+ }
111
+
112
+ @Override
113
+ public void add(Page page) {
114
+ ArrayList<LinkedHashMap<String, Object>> mapList = new ArrayList<>();
115
+
116
+ pageReader.setPage(page);
117
+ int rows = task.getRow();
118
+ if (task.getRow() == -1) {
119
+ rows = Integer.MAX_VALUE;
120
+ }
121
+
122
+ readingAndSettingDataToMap(pageReader, rows, mapList);
123
+ pageReader.close();
124
+ try {
125
+ Transport.send(prepareMessage(getSession(task), task.getFrom(), task.getTO(), task.getCC(), mapList, schema, task));
126
+ } catch (Exception e) {
127
+ e.printStackTrace();
128
+ throw new RuntimeException(e);
129
+ }
130
+ }
131
+
132
+ private void readingAndSettingDataToMap(PageReader pageReader, int rows, ArrayList<LinkedHashMap<String, Object>> mapList) {
133
+ while (pageReader.nextRecord() && rows-- > 0) {
134
+ LinkedHashMap<String, Object> map = new LinkedHashMap<>();
135
+
136
+ pageReader.getSchema().visitColumns(new ColumnVisitor() {
137
+ @Override
138
+ public void booleanColumn(Column column) {
139
+ if (pageReader.isNull(column)) {
140
+ map.put(column.getName(), "");
141
+ } else {
142
+ map.put(column.getName(), pageReader.getBoolean(column));
143
+ }
144
+ }
145
+
146
+ @Override
147
+ public void longColumn(Column column) {
148
+ if (pageReader.isNull(column)) {
149
+ map.put(column.getName(), "");
150
+ } else {
151
+ map.put(column.getName(), pageReader.getLong(column));
152
+ }
153
+ }
154
+
155
+ @Override
156
+ public void doubleColumn(Column column) {
157
+ if (pageReader.isNull(column)) {
158
+ map.put(column.getName(), "");
159
+ } else {
160
+ map.put(column.getName(), pageReader.getDouble(column));
161
+ }
162
+
163
+ }
164
+
165
+ @Override
166
+ public void stringColumn(Column column) {
167
+ if (pageReader.isNull(column)) {
168
+ map.put(column.getName(), "");
169
+ } else {
170
+ map.put(column.getName(), pageReader.getString(column));
171
+ }
172
+ }
173
+
174
+ @Override
175
+ public void timestampColumn(Column column) {
176
+ if (pageReader.isNull(column)) {
177
+ map.put(column.getName(), "");
178
+ } else {
179
+ map.put(column.getName(), pageReader.getTimestamp(column));
180
+ }
181
+
182
+ }
183
+
184
+ @Override
185
+ public void jsonColumn(Column column) {
186
+ if (pageReader.isNull(column)) {
187
+ map.put(column.getName(), "");
188
+ } else {
189
+ map.put(column.getName(), pageReader.getJson(column));
190
+ }
191
+
192
+ }
193
+ });
194
+ mapList.add(map);
195
+ }
196
+ }
197
+
198
+ private Session getSession(PluginTask task) {
199
+ try {
200
+ Properties properties = new Properties();
201
+ properties.put("mail.smtp.auth", task.getAuth());
202
+ properties.put("mail.smtp.starttls.enable", task.getSmtpEnable());
203
+ properties.put("mail.smtp.ssl.protocols", task.getProtocol());
204
+ properties.put("mail.smtp.host", task.getHost());
205
+ properties.put("mail.smtp.port", task.getPort());
206
+
207
+ if(task.getAuth()) {
208
+
209
+ return Session.getInstance(properties, new javax.mail.Authenticator() {
210
+ protected PasswordAuthentication getPasswordAuthentication() {
211
+ return new PasswordAuthentication(task.getFrom(), task.getPassword());
212
+ }
213
+ });
214
+ }else{
215
+ properties.put("mail.smtp.user", task.getUserName());
216
+ return Session.getDefaultInstance(properties);
217
+ }
218
+ } catch (Exception e) {
219
+ e.printStackTrace();
220
+ throw e;
221
+ }
222
+ }
223
+
224
+ private static Message prepareMessage(Session session, String from, List<String> to, List<String> cc, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema, PluginTask task) {
225
+ try {
226
+ String listStringTo = to.stream().map(Object::toString)
227
+ .collect(Collectors.joining(","));
228
+ String listStringCC = cc.stream().map(Object::toString)
229
+ .collect(Collectors.joining(","));
230
+ Message message = new MimeMessage(session);
231
+ message.setFrom(new InternetAddress(from));
232
+ message.addRecipients(Message.RecipientType.CC, InternetAddress.parse(listStringCC));
233
+ message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(listStringTo));
234
+ message.setSubject(task.getSubject());
235
+
236
+ if (task.getFileType().equalsIgnoreCase("html")) {
237
+ setHtmlContent(message, mapList, schema);
238
+ } else if (task.getFileType().equalsIgnoreCase("json")) {
239
+ setJsonContent(message, mapList, schema);
240
+ }
241
+ return message;
242
+ } catch (Exception e) {
243
+ e.printStackTrace();
244
+ throw new RuntimeException(e);
245
+ }
246
+ }
247
+
248
+ private static void setHtmlContent(Message message, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema) {
249
+
250
+ try {
251
+ MimeMultipart multipart = new MimeMultipart();
252
+ BodyPart messageBodyPart = new MimeBodyPart();
253
+ StringBuilder email = new StringBuilder();
254
+
255
+ email.append("<!DOCTYPE html><html><body>"
256
+ + "<table style='border:1px solid #96D4D4;border-collapse: collapse;width: 100%'>");
257
+
258
+ email.append("<tr>");
259
+ for (int i = 0; i < schema.size(); i++) {
260
+ email.append("<th style='border:2px solid black; border-collapse: collapse;border-color: #96D4D4'>");
261
+ email.append(schema.getColumn(i).getName().split("/")[0]);
262
+ email.append("</th>");
263
+ }
264
+ email.append("</tr>");
265
+
266
+ for (int i = 0; i < mapList.size(); i++) {
267
+ Map<String, Object> map = mapList.get(i);
268
+ email.append("<tr >");
269
+ for (Map.Entry<String, Object> entry : map.entrySet()) {
270
+ email.append("<td style='border:1px solid black;border-collapse: collapse;text-align:center;border-color: #96D4D4'>");
271
+ email.append(entry.getValue());
272
+ email.append("</td>");
273
+ }
274
+ email.append("<tr>");
275
+ }
276
+ email.append("</table></body></html>");
277
+
278
+ messageBodyPart.setContent(email.toString(), "text/html");
279
+ multipart.addBodyPart(messageBodyPart);
280
+ message.setContent(multipart);
281
+ } catch (Exception e) {
282
+ System.out.println("Not able to send data");
283
+ throw new RuntimeException(e);
284
+ }
285
+
286
+ }
287
+
288
+ private static void setJsonContent(Message message, ArrayList<LinkedHashMap<String, Object>> mapList, Schema schema) {
289
+ try {
290
+ ObjectMapper objectMapper = new ObjectMapper();
291
+ String value = null;
292
+ value = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(mapList);
293
+ message.setText(value);
294
+ } catch (Exception e) {
295
+ e.printStackTrace();
296
+ throw new RuntimeException(e);
297
+ }
298
+
299
+ }
300
+
301
+ @Override
302
+ public void finish() {
303
+
304
+ }
305
+
306
+ @Override
307
+ public void close() {
308
+
309
+ }
310
+
311
+ @Override
312
+ public void abort() {
313
+
314
+ }
315
+
316
+ @Override
317
+ public TaskReport commit() {
318
+ return null;
319
+ }
320
+ }
321
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-send_email
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infoobjects Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-09-16 00:00:00.000000000 Z
11
+ date: 2022-09-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,14 +46,14 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
- - LICENSE.txt
49
+ - LICENSE
50
50
  - README.md
51
51
  - build.gradle
52
52
  - calendar.csv
53
53
  - classpath/activation-1.1.jar
54
54
  - classpath/commons-codec-1.10.jar
55
55
  - classpath/commons-logging-1.2.jar
56
- - classpath/embulk-output-send_email-0.1.0.jar
56
+ - classpath/embulk-output-send_email-0.1.1.jar
57
57
  - classpath/google-api-client-1.26.0.jar
58
58
  - classpath/google-api-client-java6-1.26.0.jar
59
59
  - classpath/google-api-services-gmail-v1-rev83-1.23.0.jar
@@ -70,12 +70,14 @@ files:
70
70
  - classpath/mail-1.4.7.jar
71
71
  - config/checkstyle/checkstyle.xml
72
72
  - config/checkstyle/default.xml
73
+ - embulk-output-send_email-0.1.0.gem
73
74
  - example/config.yml
74
75
  - gradle/wrapper/gradle-wrapper.jar
75
76
  - gradle/wrapper/gradle-wrapper.properties
76
77
  - gradlew
77
78
  - gradlew.bat
78
79
  - lib/embulk/output/send_email.rb
80
+ - screenshots/logo.png
79
81
  - src/main/java/org/embulk/output/send_email/SendEmailOutputPlugin.java
80
82
  - src/test/java/org/embulk/output/send_email/TestSendEmailOutputPlugin.java
81
83
  homepage: