Subversion Repositories SmartDukaan

Rev

Rev 12103 | Rev 31028 | Go to most recent revision | 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);
263
		props.put("mail.smtp.auth", "true");
264
		props.put("mail.debug", "true");
265
		props.put("mail.smtp.port", SMTP_PORT);
266
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
267
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
268
		props.put("mail.smtp.socketFactory.fallback", "false");
269
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
270
 
271
		Session session = Session.getDefaultInstance(props,
272
				new javax.mail.Authenticator() {
273
 
274
			protected PasswordAuthentication getPasswordAuthentication() {
275
				return new PasswordAuthentication(from, password);
276
			}
277
		});
278
 
279
		session.setDebug(debug);
280
 
281
		Message msg = new MimeMessage(session);
282
 
283
		//Set the from address
284
		InternetAddress addressFrom = new InternetAddress(from);
285
		msg.setFrom(addressFrom);
286
 
287
		//Set the recipients
288
		InternetAddress[] addressTo = new InternetAddress[recipients.length];
289
		for (int i = 0; i < recipients.length; i++) {
290
			addressTo[i] = new InternetAddress(recipients[i]);
291
		}
292
		msg.setRecipients(Message.RecipientType.TO, addressTo);
20152 aman.kumar 293
 
294
		if(cc!=null){
295
			//Set the cc
296
			InternetAddress[] addressCC = new InternetAddress[cc.length];
297
			for (int i = 0; i < cc.length; i++) {
298
				addressCC[i] = new InternetAddress(cc[i]);
299
			}
300
			msg.setRecipients(Message.RecipientType.CC, addressCC);
301
		}
302
 
8675 vikram.rag 303
 
304
		//Setting the Subject
305
		msg.setSubject(subject);
306
		return msg;
307
	}
9703 vikram.rag 308
 
309
	public void sendSSLMessage(String recipients[], String subject,final String from, final String password,String htmlContent) throws MessagingException {
310
		try {
20152 aman.kumar 311
			Message msg = prepareMessage(recipients,null, subject, from, password);
9703 vikram.rag 312
			//Create the multi-part object to hold the text and attachment parts
313
			Multipart multipart = new MimeMultipart();
314
			MimeBodyPart htmlPart = new MimeBodyPart();
315
			htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
316
			multipart.addBodyPart(htmlPart);
317
			msg.setContent(multipart);
318
			Transport.send(msg);
319
		} catch (Exception e) {
320
			// If there is any error with normal mail sending, try diving receipients across domains
321
			if (hasMultipleDomains(recipients)) {
322
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
323
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, "", from, password, "");
324
				}
8675 vikram.rag 325
 
9703 vikram.rag 326
				return;
327
			}
328
 
329
			throw new MessagingException(e.getMessage(), e);
330
		}
331
	}
12103 manish.sha 332
 
333
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, List<File> files, String htmlFileName) throws MessagingException {
334
		try {
335
 
336
			BufferedReader bufferedReader = new BufferedReader(new FileReader(htmlFileName));
9703 vikram.rag 337
 
12103 manish.sha 338
			StringBuffer htmlContent = new StringBuffer();
339
			String line = null;
9703 vikram.rag 340
 
12103 manish.sha 341
			while((line =bufferedReader.readLine())!=null){
342
 
343
				htmlContent.append(line).append("\n");
344
 
345
			}
20152 aman.kumar 346
			Message msg = prepareMessage(recipients,null, subject, from, password);
12103 manish.sha 347
 
348
			//Create the multi-part object to hold the text and attachment parts
349
			Multipart multipart = new MimeMultipart();
350
 
351
			MimeBodyPart htmlPart = new MimeBodyPart();
352
 
353
			htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");
354
 
355
			// create the message part 
356
			MimeBodyPart messageBodyPart = new MimeBodyPart();
357
			//Part 1: Text message
358
			messageBodyPart.setText(message);
359
			multipart.addBodyPart(htmlPart);
360
 
361
			//Part 2: Attachment
362
			for (File file : files) {
363
				DataSource source = new FileDataSource(file);
364
				String[] names = file.getAbsolutePath().split("/");
365
				messageBodyPart = new MimeBodyPart();
366
				messageBodyPart.setDataHandler(new DataHandler(source));
367
				messageBodyPart.setFileName(names[names.length - 1]);
368
				multipart.addBodyPart(messageBodyPart);
369
			}
370
 
371
			// Put parts in message
372
			msg.setContent(multipart);
373
			Transport.send(msg);
374
		} catch (Exception e) {
375
			// If there is any error with normal mail sending, try diving receipients across domains
376
			if (hasMultipleDomains(recipients)) {
377
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
378
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, files);
379
				}
380
 
381
				return;
382
			}
383
 
384
			throw new MessagingException(e.getMessage(), e);
385
		}
386
	}
387
 
388
 
8675 vikram.rag 389
	public static void main(String args[]) throws Exception {
20152 aman.kumar 390
		try {
391
			String recipients[] = { "aman.kumar@shop2020.in", "amanshivam@gmail.com" };
392
			String cc[] = { "aman.kumar@saholic.com", "amanshivam11@gmail.com" };
393
			boolean debug = true;
8675 vikram.rag 394
 
20152 aman.kumar 395
			Properties props = new Properties();
396
			props.put("mail.smtp.host", SMTP_HOST_NAME);
397
			props.put("mail.smtp.auth", "true");
398
			props.put("mail.debug", "true");
399
			props.put("mail.smtp.port", SMTP_PORT);
400
			props.put("mail.smtp.socketFactory.port", SMTP_PORT);
401
			props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
402
			props.put("mail.smtp.socketFactory.fallback", "false");
403
			Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
404
 
405
			Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {
406
 
407
				protected PasswordAuthentication getPasswordAuthentication() {
408
					return new PasswordAuthentication("adwords@shop2020.in", "adwords_shop2020");
409
				}
410
			});
411
 
412
			session.setDebug(debug);
413
 
414
			Message msg = new MimeMessage(session);
415
 
416
			// Set the from address
417
			InternetAddress addressFrom = new InternetAddress("adwords@shop2020.in");
418
			msg.setFrom(addressFrom);
419
 
420
			// Set the recipients
421
			InternetAddress[] addressTo = new InternetAddress[recipients.length];
422
			for (int i = 0; i < recipients.length; i++) {
423
				addressTo[i] = new InternetAddress(recipients[i]);
424
			}
425
			msg.setRecipients(Message.RecipientType.TO, addressTo);
426
 
427
			if (cc != null) {
428
				// Set the cc
429
				InternetAddress[] addressCC = new InternetAddress[cc.length];
430
				for (int i = 0; i < cc.length; i++) {
431
					addressCC[i] = new InternetAddress(cc[i]);
432
				}
433
				msg.setRecipients(Message.RecipientType.CC, addressCC);
434
			}
435
 
436
			// Setting the Subject
437
			msg.setSubject("subject abcd");
438
			// Message msg = prepareMessage(recipients,cc, "abcd",
439
			// "adwords@shop2020.in", "adwords_shop2020");
440
 
441
			// Create the multi-part object to hold the text and attachment
442
			// parts
443
			Multipart multipart = new MimeMultipart();
444
 
445
			// create the message part
446
			MimeBodyPart messageBodyPart = new MimeBodyPart();
447
			// Part 1: Text message
448
			messageBodyPart.setText("this is a message");
449
			multipart.addBodyPart(messageBodyPart);
450
 
451
			// Put parts in message
452
			msg.setContent(multipart);
453
 
454
 
455
				Transport.send(msg);
456
 
457
 
458
		} catch (Exception e) {
459
			e.printStackTrace();
460
		}
8675 vikram.rag 461
	}
2822 chandransh 462
}