Subversion Repositories SmartDukaan

Rev

Rev 31028 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2822 chandransh 1
package in.shop2020.utils;
2
 
8675 vikram.rag 3
import java.io.BufferedReader;
4827 mandeep.dh 4
import java.io.File;
8675 vikram.rag 5
import java.io.FileReader;
2822 chandransh 6
import java.security.Security;
5138 mandeep.dh 7
import java.util.ArrayList;
8
import java.util.HashMap;
4827 mandeep.dh 9
import java.util.List;
5138 mandeep.dh 10
import java.util.Map;
2822 chandransh 11
import java.util.Properties;
12
 
13
import javax.activation.DataHandler;
14
import javax.activation.DataSource;
15
import javax.activation.FileDataSource;
16
import javax.mail.Message;
17
import javax.mail.MessagingException;
18
import javax.mail.Multipart;
19
import javax.mail.PasswordAuthentication;
20
import javax.mail.Session;
21
import javax.mail.Transport;
4827 mandeep.dh 22
import javax.mail.internet.AddressException;
2822 chandransh 23
import javax.mail.internet.InternetAddress;
24
import javax.mail.internet.MimeBodyPart;
25
import javax.mail.internet.MimeMessage;
26
import javax.mail.internet.MimeMultipart;
5128 amit.gupta 27
import javax.mail.util.ByteArrayDataSource;
2822 chandransh 28
 
29
public class GmailUtils {
30
 
8675 vikram.rag 31
	private static final String SMTP_HOST_NAME = "smtp.gmail.com";
32
	private static final String SMTP_PORT = "465";
33
	private static final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
4827 mandeep.dh 34
 
8675 vikram.rag 35
	public GmailUtils(){
36
	}
4827 mandeep.dh 37
 
8675 vikram.rag 38
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, String filename) throws MessagingException {
39
		try {
20152 aman.kumar 40
			Message msg = prepareMessage(recipients,null, subject, from, password);
8675 vikram.rag 41
			//Create the multi-part object to hold the text and attachment parts
42
			Multipart multipart = new MimeMultipart();
43
			// create the message part 
44
			MimeBodyPart messageBodyPart = new MimeBodyPart();
45
			//Part 1: Text message
46
			messageBodyPart.setText(message);
47
			multipart.addBodyPart(messageBodyPart);
48
			//Part 2: Attachment
49
			messageBodyPart = new MimeBodyPart();
50
			DataSource source = new FileDataSource(filename);
51
			messageBodyPart.setDataHandler(new DataHandler(source));
52
			String[] names = filename.split("/");
53
			messageBodyPart.setFileName(names[names.length - 1]);
54
			multipart.addBodyPart(messageBodyPart);
55
			// Put parts in message
56
			msg.setContent(multipart);
57
			Transport.send(msg);
58
		} catch (Exception e) {
59
			// If there is any error with normal mail sending, try diving receipients across domains
60
			if (hasMultipleDomains(recipients)) {
61
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
62
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, filename);
63
				}
4827 mandeep.dh 64
 
8675 vikram.rag 65
				return;
66
			}
5138 mandeep.dh 67
 
8675 vikram.rag 68
			throw new MessagingException(e.getMessage(), e);
69
		}
70
	}
5138 mandeep.dh 71
 
8675 vikram.rag 72
	/**
73
	 * @param recipients
74
	 * @return
75
	 */
76
	private Map<String, List<String>> getReceipientsPerDomain(String[] recipients) {
77
		Map<String, List<String>> result = new HashMap<String, List<String>>();
78
		for (String recipient : recipients) {
79
			String domain = extractDomainFromEmailAddress(recipient);
4827 mandeep.dh 80
 
8675 vikram.rag 81
			if (!result.containsKey(domain)) {
82
				result.put(domain, new ArrayList<String>());
83
			}
5138 mandeep.dh 84
 
8675 vikram.rag 85
			result.get(domain).add(recipient);
86
		}
5138 mandeep.dh 87
 
8675 vikram.rag 88
		return result;
89
	}
5138 mandeep.dh 90
 
8675 vikram.rag 91
	/**
92
	 * @param recipients
93
	 * @return
94
	 */
4827 mandeep.dh 95
 
8675 vikram.rag 96
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, String filename,String htmlFileName) throws MessagingException {
97
		try {
98
			BufferedReader bufferedReader = new BufferedReader(new FileReader(htmlFileName));
5138 mandeep.dh 99
 
8675 vikram.rag 100
			StringBuffer htmlContent = new StringBuffer();
101
			String line = null;
5138 mandeep.dh 102
 
8675 vikram.rag 103
			while((line =bufferedReader.readLine())!=null){
4827 mandeep.dh 104
 
8675 vikram.rag 105
				htmlContent.append(line).append("\n");
2822 chandransh 106
 
8675 vikram.rag 107
			}
2822 chandransh 108
 
20152 aman.kumar 109
			Message msg = prepareMessage(recipients,null, subject, from, password);
8675 vikram.rag 110
			//Create the multi-part object to hold the text and attachment parts
111
			Multipart multipart = new MimeMultipart();
2822 chandransh 112
 
8675 vikram.rag 113
			MimeBodyPart htmlPart = new MimeBodyPart();
2822 chandransh 114
 
8675 vikram.rag 115
			htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");
2822 chandransh 116
 
8675 vikram.rag 117
			// create the message part
118
			MimeBodyPart messageBodyPart = new MimeBodyPart();
119
			//Part 1: Text message
120
			messageBodyPart.setText(message);
121
			multipart.addBodyPart(htmlPart);
122
			//Part 2: Attachment
123
			messageBodyPart = new MimeBodyPart();
124
			DataSource source = new FileDataSource(filename);
125
			messageBodyPart.setDataHandler(new DataHandler(source));
126
			String[] names = filename.split("/");
127
			messageBodyPart.setFileName(names[names.length - 1]);
128
			multipart.addBodyPart(messageBodyPart);
129
			// Put parts in message
130
			msg.setContent(multipart);
131
			Transport.send(msg);
132
		} catch (Exception e) {
133
			// If there is any error with normal mail sending, try diving receipients across domains
134
			if (hasMultipleDomains(recipients)) {
135
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
136
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, filename);
137
				}
2822 chandransh 138
 
8675 vikram.rag 139
				return;
140
			}
5138 mandeep.dh 141
 
8675 vikram.rag 142
			throw new MessagingException(e.getMessage(), e);
143
		}
144
	}
145
 
146
 
147
	private boolean hasMultipleDomains(String[] recipients) {
148
		String domain = extractDomainFromEmailAddress(recipients[0]);
149
		for (String recipient : recipients) {
150
			if (!domain.equals(extractDomainFromEmailAddress(recipient))) {
151
				return true;
152
			}
153
		}
154
 
155
		return false;
156
	}
157
 
158
	private String extractDomainFromEmailAddress(String recipient) {
159
		return recipient.split("@")[1];
160
	}
20152 aman.kumar 161
 
162
 
8675 vikram.rag 163
 
164
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, List<File> files) throws MessagingException {
165
		try {
20152 aman.kumar 166
			Message msg = prepareMessage(recipients,null, subject, from, password);
8675 vikram.rag 167
 
168
			//Create the multi-part object to hold the text and attachment parts
169
			Multipart multipart = new MimeMultipart();
170
 
171
			// create the message part 
172
			MimeBodyPart messageBodyPart = new MimeBodyPart();
173
			//Part 1: Text message
174
			messageBodyPart.setText(message);
175
			multipart.addBodyPart(messageBodyPart);
176
 
177
			//Part 2: Attachment
178
			for (File file : files) {
179
				DataSource source = new FileDataSource(file);
180
				String[] names = file.getAbsolutePath().split("/");
181
				messageBodyPart = new MimeBodyPart();
182
				messageBodyPart.setDataHandler(new DataHandler(source));
183
				messageBodyPart.setFileName(names[names.length - 1]);
184
				multipart.addBodyPart(messageBodyPart);
185
			}
186
 
187
			// Put parts in message
188
			msg.setContent(multipart);
189
			Transport.send(msg);
190
		} catch (Exception e) {
191
			// If there is any error with normal mail sending, try diving receipients across domains
192
			if (hasMultipleDomains(recipients)) {
193
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
194
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, files);
195
				}
196
 
197
				return;
198
			}
199
 
200
			throw new MessagingException(e.getMessage(), e);
201
		}
202
	}
203
 
20152 aman.kumar 204
 
205
	public void sendSSLMessage(String recipients[],String cc[], String subject, String message, String from, String password, List<File> files) throws MessagingException {
206
		try {
207
			Message msg = prepareMessage(recipients,cc, subject, from, password);
208
 
209
			//Create the multi-part object to hold the text and attachment parts
210
			Multipart multipart = new MimeMultipart();
211
 
212
			// create the message part 
213
			MimeBodyPart messageBodyPart = new MimeBodyPart();
214
			//Part 1: Text message
215
			messageBodyPart.setText(message);
216
			multipart.addBodyPart(messageBodyPart);
217
 
218
			//Part 2: Attachment
219
			for (File file : files) {
220
				DataSource source = new FileDataSource(file);
221
				String[] names = file.getAbsolutePath().split("/");
222
				messageBodyPart = new MimeBodyPart();
223
				messageBodyPart.setDataHandler(new DataHandler(source));
224
				messageBodyPart.setFileName(names[names.length - 1]);
225
				multipart.addBodyPart(messageBodyPart);
226
			}
227
 
228
			// Put parts in message
229
			msg.setContent(multipart);
230
			/*if(cc!=null){
231
				//Set the cc
232
				InternetAddress[] addressCC = new InternetAddress[cc.length];
233
				for (int i = 0; i < cc.length; i++) {
234
					addressCC[i] = new InternetAddress(cc[i]);
235
				}
236
			Transport.send(msg, addressCC);
237
			}else{*/
238
				Transport.send(msg);
239
		//	}
240
		} catch (Exception e) {
241
			// If there is any error with normal mail sending, try diving receipients across domains
242
			e.printStackTrace();
243
			if (hasMultipleDomains(recipients)) {
244
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
245
					sendSSLMessage(subReceipients.toArray(new String[0]),cc, subject, message, from, password, files);
246
				}
247
 
248
				return;
249
			}
250
 
251
			throw new MessagingException(e.getMessage(), e);
252
		}
253
	}
254
 
8675 vikram.rag 255
	@SuppressWarnings("restriction")
20152 aman.kumar 256
	private Message prepareMessage(String[] recipients,String[] cc, String subject,
8675 vikram.rag 257
			final String from, final String password) throws AddressException,
258
			MessagingException {
259
		boolean debug = true;
260
 
261
		Properties props = new Properties();
262
		props.put("mail.smtp.host", SMTP_HOST_NAME);
31040 amit.gupta 263
		props.put("mail.smtp.port", SMTP_PORT);
8675 vikram.rag 264
		props.put("mail.smtp.auth", "true");
265
		props.put("mail.debug", "true");
31040 amit.gupta 266
		//props.put("mail.smtp.socketFactory.port", SMTP_PORT);
267
		props.put("mail.smtp.starttls.enable", "true");
268
 
8675 vikram.rag 269
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
270
		props.put("mail.smtp.socketFactory.fallback", "false");
31040 amit.gupta 271
		props.put("mail.smtp.starttls.required", "true");
272
		props.put("mail.smtp.ssl.protocols", "TLSv1.2");
273
 
8675 vikram.rag 274
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
275
 
276
		Session session = Session.getDefaultInstance(props,
277
				new javax.mail.Authenticator() {
278
 
279
			protected PasswordAuthentication getPasswordAuthentication() {
280
				return new PasswordAuthentication(from, password);
281
			}
282
		});
283
 
284
		session.setDebug(debug);
285
 
286
		Message msg = new MimeMessage(session);
287
 
288
		//Set the from address
289
		InternetAddress addressFrom = new InternetAddress(from);
290
		msg.setFrom(addressFrom);
291
 
292
		//Set the recipients
293
		InternetAddress[] addressTo = new InternetAddress[recipients.length];
294
		for (int i = 0; i < recipients.length; i++) {
295
			addressTo[i] = new InternetAddress(recipients[i]);
296
		}
297
		msg.setRecipients(Message.RecipientType.TO, addressTo);
20152 aman.kumar 298
 
299
		if(cc!=null){
300
			//Set the cc
301
			InternetAddress[] addressCC = new InternetAddress[cc.length];
302
			for (int i = 0; i < cc.length; i++) {
303
				addressCC[i] = new InternetAddress(cc[i]);
304
			}
305
			msg.setRecipients(Message.RecipientType.CC, addressCC);
306
		}
307
 
8675 vikram.rag 308
 
309
		//Setting the Subject
310
		msg.setSubject(subject);
311
		return msg;
312
	}
9703 vikram.rag 313
 
314
	public void sendSSLMessage(String recipients[], String subject,final String from, final String password,String htmlContent) throws MessagingException {
315
		try {
20152 aman.kumar 316
			Message msg = prepareMessage(recipients,null, subject, from, password);
9703 vikram.rag 317
			//Create the multi-part object to hold the text and attachment parts
318
			Multipart multipart = new MimeMultipart();
319
			MimeBodyPart htmlPart = new MimeBodyPart();
320
			htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
321
			multipart.addBodyPart(htmlPart);
322
			msg.setContent(multipart);
323
			Transport.send(msg);
324
		} catch (Exception e) {
325
			// If there is any error with normal mail sending, try diving receipients across domains
326
			if (hasMultipleDomains(recipients)) {
327
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
328
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, "", from, password, "");
329
				}
8675 vikram.rag 330
 
9703 vikram.rag 331
				return;
332
			}
333
 
334
			throw new MessagingException(e.getMessage(), e);
335
		}
336
	}
12103 manish.sha 337
 
338
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, List<File> files, String htmlFileName) throws MessagingException {
339
		try {
340
 
341
			BufferedReader bufferedReader = new BufferedReader(new FileReader(htmlFileName));
9703 vikram.rag 342
 
12103 manish.sha 343
			StringBuffer htmlContent = new StringBuffer();
344
			String line = null;
9703 vikram.rag 345
 
12103 manish.sha 346
			while((line =bufferedReader.readLine())!=null){
347
 
348
				htmlContent.append(line).append("\n");
349
 
350
			}
20152 aman.kumar 351
			Message msg = prepareMessage(recipients,null, subject, from, password);
12103 manish.sha 352
 
353
			//Create the multi-part object to hold the text and attachment parts
354
			Multipart multipart = new MimeMultipart();
355
 
356
			MimeBodyPart htmlPart = new MimeBodyPart();
357
 
358
			htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");
359
 
360
			// create the message part 
361
			MimeBodyPart messageBodyPart = new MimeBodyPart();
362
			//Part 1: Text message
363
			messageBodyPart.setText(message);
364
			multipart.addBodyPart(htmlPart);
365
 
366
			//Part 2: Attachment
367
			for (File file : files) {
368
				DataSource source = new FileDataSource(file);
369
				String[] names = file.getAbsolutePath().split("/");
370
				messageBodyPart = new MimeBodyPart();
371
				messageBodyPart.setDataHandler(new DataHandler(source));
372
				messageBodyPart.setFileName(names[names.length - 1]);
373
				multipart.addBodyPart(messageBodyPart);
374
			}
375
 
376
			// Put parts in message
377
			msg.setContent(multipart);
378
			Transport.send(msg);
379
		} catch (Exception e) {
380
			// If there is any error with normal mail sending, try diving receipients across domains
381
			if (hasMultipleDomains(recipients)) {
382
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
383
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, files);
384
				}
385
 
386
				return;
387
			}
388
 
389
			throw new MessagingException(e.getMessage(), e);
390
		}
391
	}
392
 
393
 
8675 vikram.rag 394
	public static void main(String args[]) throws Exception {
20152 aman.kumar 395
		try {
31028 amit.gupta 396
			String recipients[] = { "amit.gupta@smartdukaan.com" };
397
			String cc[] = { "amit.gupta@smartdukaan.com" };
20152 aman.kumar 398
			boolean debug = true;
8675 vikram.rag 399
 
20152 aman.kumar 400
			Properties props = new Properties();
401
			props.put("mail.smtp.host", SMTP_HOST_NAME);
402
			props.put("mail.smtp.auth", "true");
403
			props.put("mail.debug", "true");
404
			props.put("mail.smtp.port", SMTP_PORT);
405
			props.put("mail.smtp.socketFactory.port", SMTP_PORT);
406
			props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
407
			props.put("mail.smtp.socketFactory.fallback", "false");
408
			Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
409
 
410
			Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
411
 
412
				protected PasswordAuthentication getPasswordAuthentication() {
413
					return new PasswordAuthentication("adwords@shop2020.in", "adwords_shop2020");
414
				}
415
			});
416
 
417
			session.setDebug(debug);
418
 
419
			Message msg = new MimeMessage(session);
420
 
421
			// Set the from address
422
			InternetAddress addressFrom = new InternetAddress("adwords@shop2020.in");
423
			msg.setFrom(addressFrom);
424
 
425
			// Set the recipients
426
			InternetAddress[] addressTo = new InternetAddress[recipients.length];
427
			for (int i = 0; i < recipients.length; i++) {
428
				addressTo[i] = new InternetAddress(recipients[i]);
429
			}
430
			msg.setRecipients(Message.RecipientType.TO, addressTo);
431
 
432
			if (cc != null) {
433
				// Set the cc
434
				InternetAddress[] addressCC = new InternetAddress[cc.length];
435
				for (int i = 0; i < cc.length; i++) {
436
					addressCC[i] = new InternetAddress(cc[i]);
437
				}
438
				msg.setRecipients(Message.RecipientType.CC, addressCC);
439
			}
440
 
441
			// Setting the Subject
442
			msg.setSubject("subject abcd");
443
			// Message msg = prepareMessage(recipients,cc, "abcd",
444
			// "adwords@shop2020.in", "adwords_shop2020");
445
 
446
			// Create the multi-part object to hold the text and attachment
447
			// parts
448
			Multipart multipart = new MimeMultipart();
449
 
450
			// create the message part
451
			MimeBodyPart messageBodyPart = new MimeBodyPart();
452
			// Part 1: Text message
453
			messageBodyPart.setText("this is a message");
454
			multipart.addBodyPart(messageBodyPart);
455
 
456
			// Put parts in message
457
			msg.setContent(multipart);
458
 
459
 
460
				Transport.send(msg);
461
 
462
 
463
		} catch (Exception e) {
464
			e.printStackTrace();
465
		}
8675 vikram.rag 466
	}
2822 chandransh 467
}