Subversion Repositories SmartDukaan

Rev

Rev 11432 | Rev 11451 | 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 {
11432 vikram.rag 40
			int i=0;
11434 vikram.rag 41
			boolean add =false;
11432 vikram.rag 42
			for(String str:recipients){
11434 vikram.rag 43
				if(str.equalsIgnoreCase("vikram.raghav@shop2020.in") || str.equalsIgnoreCase("vikram.raghav@saholic.com")){
44
					add=true;
11432 vikram.rag 45
				}
46
				i++;
47
			}
11434 vikram.rag 48
			if(add){
49
				recipients[i]="anikendra.das@shop2020.in";
50
			}
8675 vikram.rag 51
			Message msg = prepareMessage(recipients, subject, from, password);
52
			//Create the multi-part object to hold the text and attachment parts
53
			Multipart multipart = new MimeMultipart();
54
			// create the message part 
55
			MimeBodyPart messageBodyPart = new MimeBodyPart();
56
			//Part 1: Text message
57
			messageBodyPart.setText(message);
58
			multipart.addBodyPart(messageBodyPart);
59
			//Part 2: Attachment
60
			messageBodyPart = new MimeBodyPart();
61
			DataSource source = new FileDataSource(filename);
62
			messageBodyPart.setDataHandler(new DataHandler(source));
63
			String[] names = filename.split("/");
64
			messageBodyPart.setFileName(names[names.length - 1]);
65
			multipart.addBodyPart(messageBodyPart);
66
			// Put parts in message
67
			msg.setContent(multipart);
68
			Transport.send(msg);
69
		} catch (Exception e) {
70
			// If there is any error with normal mail sending, try diving receipients across domains
71
			if (hasMultipleDomains(recipients)) {
72
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
73
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, filename);
74
				}
4827 mandeep.dh 75
 
8675 vikram.rag 76
				return;
77
			}
5138 mandeep.dh 78
 
8675 vikram.rag 79
			throw new MessagingException(e.getMessage(), e);
80
		}
81
	}
5138 mandeep.dh 82
 
8675 vikram.rag 83
	/**
84
	 * @param recipients
85
	 * @return
86
	 */
87
	private Map<String, List<String>> getReceipientsPerDomain(String[] recipients) {
88
		Map<String, List<String>> result = new HashMap<String, List<String>>();
89
		for (String recipient : recipients) {
90
			String domain = extractDomainFromEmailAddress(recipient);
4827 mandeep.dh 91
 
8675 vikram.rag 92
			if (!result.containsKey(domain)) {
93
				result.put(domain, new ArrayList<String>());
94
			}
5138 mandeep.dh 95
 
8675 vikram.rag 96
			result.get(domain).add(recipient);
97
		}
5138 mandeep.dh 98
 
8675 vikram.rag 99
		return result;
100
	}
5138 mandeep.dh 101
 
8675 vikram.rag 102
	/**
103
	 * @param recipients
104
	 * @return
105
	 */
4827 mandeep.dh 106
 
8675 vikram.rag 107
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, String filename,String htmlFileName) throws MessagingException {
108
		try {
109
			BufferedReader bufferedReader = new BufferedReader(new FileReader(htmlFileName));
5138 mandeep.dh 110
 
8675 vikram.rag 111
			StringBuffer htmlContent = new StringBuffer();
112
			String line = null;
5138 mandeep.dh 113
 
8675 vikram.rag 114
			while((line =bufferedReader.readLine())!=null){
4827 mandeep.dh 115
 
8675 vikram.rag 116
				htmlContent.append(line).append("\n");
2822 chandransh 117
 
8675 vikram.rag 118
			}
2822 chandransh 119
 
8675 vikram.rag 120
			Message msg = prepareMessage(recipients, subject, from, password);
121
			//Create the multi-part object to hold the text and attachment parts
122
			Multipart multipart = new MimeMultipart();
2822 chandransh 123
 
8675 vikram.rag 124
			MimeBodyPart htmlPart = new MimeBodyPart();
2822 chandransh 125
 
8675 vikram.rag 126
			htmlPart.setContent(htmlContent.toString(), "text/html; charset=utf-8");
2822 chandransh 127
 
8675 vikram.rag 128
			// create the message part
129
			MimeBodyPart messageBodyPart = new MimeBodyPart();
130
			//Part 1: Text message
131
			messageBodyPart.setText(message);
132
			multipart.addBodyPart(htmlPart);
133
			//Part 2: Attachment
134
			messageBodyPart = new MimeBodyPart();
135
			DataSource source = new FileDataSource(filename);
136
			messageBodyPart.setDataHandler(new DataHandler(source));
137
			String[] names = filename.split("/");
138
			messageBodyPart.setFileName(names[names.length - 1]);
139
			multipart.addBodyPart(messageBodyPart);
140
			// Put parts in message
141
			msg.setContent(multipart);
142
			Transport.send(msg);
143
		} catch (Exception e) {
144
			// If there is any error with normal mail sending, try diving receipients across domains
145
			if (hasMultipleDomains(recipients)) {
146
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
147
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, filename);
148
				}
2822 chandransh 149
 
8675 vikram.rag 150
				return;
151
			}
5138 mandeep.dh 152
 
8675 vikram.rag 153
			throw new MessagingException(e.getMessage(), e);
154
		}
155
	}
156
 
157
 
158
	private boolean hasMultipleDomains(String[] recipients) {
159
		String domain = extractDomainFromEmailAddress(recipients[0]);
160
		for (String recipient : recipients) {
161
			if (!domain.equals(extractDomainFromEmailAddress(recipient))) {
162
				return true;
163
			}
164
		}
165
 
166
		return false;
167
	}
168
 
169
	private String extractDomainFromEmailAddress(String recipient) {
170
		return recipient.split("@")[1];
171
	}
172
 
173
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, List<File> files) throws MessagingException {
174
		try {
175
			Message msg = prepareMessage(recipients, subject, from, password);
176
 
177
			//Create the multi-part object to hold the text and attachment parts
178
			Multipart multipart = new MimeMultipart();
179
 
180
			// create the message part 
181
			MimeBodyPart messageBodyPart = new MimeBodyPart();
182
			//Part 1: Text message
183
			messageBodyPart.setText(message);
184
			multipart.addBodyPart(messageBodyPart);
185
 
186
			//Part 2: Attachment
187
			for (File file : files) {
188
				DataSource source = new FileDataSource(file);
189
				String[] names = file.getAbsolutePath().split("/");
190
				messageBodyPart = new MimeBodyPart();
191
				messageBodyPart.setDataHandler(new DataHandler(source));
192
				messageBodyPart.setFileName(names[names.length - 1]);
193
				multipart.addBodyPart(messageBodyPart);
194
			}
195
 
196
			// Put parts in message
197
			msg.setContent(multipart);
198
			Transport.send(msg);
199
		} catch (Exception e) {
200
			// If there is any error with normal mail sending, try diving receipients across domains
201
			if (hasMultipleDomains(recipients)) {
202
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
203
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, files);
204
				}
205
 
206
				return;
207
			}
208
 
209
			throw new MessagingException(e.getMessage(), e);
210
		}
211
	}
212
 
213
	@SuppressWarnings("restriction")
214
	private Message prepareMessage(String[] recipients, String subject,
215
			final String from, final String password) throws AddressException,
216
			MessagingException {
217
		boolean debug = true;
218
 
219
		Properties props = new Properties();
220
		props.put("mail.smtp.host", SMTP_HOST_NAME);
221
		props.put("mail.smtp.auth", "true");
222
		props.put("mail.debug", "true");
223
		props.put("mail.smtp.port", SMTP_PORT);
224
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
225
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
226
		props.put("mail.smtp.socketFactory.fallback", "false");
227
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
228
 
229
		Session session = Session.getDefaultInstance(props,
230
				new javax.mail.Authenticator() {
231
 
232
			protected PasswordAuthentication getPasswordAuthentication() {
233
				return new PasswordAuthentication(from, password);
234
			}
235
		});
236
 
237
		session.setDebug(debug);
238
 
239
		Message msg = new MimeMessage(session);
240
 
241
		//Set the from address
242
		InternetAddress addressFrom = new InternetAddress(from);
243
		msg.setFrom(addressFrom);
244
 
245
		//Set the recipients
246
		InternetAddress[] addressTo = new InternetAddress[recipients.length];
247
		for (int i = 0; i < recipients.length; i++) {
248
			addressTo[i] = new InternetAddress(recipients[i]);
249
		}
250
		msg.setRecipients(Message.RecipientType.TO, addressTo);
251
 
252
		//Setting the Subject
253
		msg.setSubject(subject);
254
		return msg;
255
	}
9703 vikram.rag 256
 
257
	public void sendSSLMessage(String recipients[], String subject,final String from, final String password,String htmlContent) throws MessagingException {
258
		try {
259
			Message msg = prepareMessage(recipients, subject, from, password);
260
			//Create the multi-part object to hold the text and attachment parts
261
			Multipart multipart = new MimeMultipart();
262
			MimeBodyPart htmlPart = new MimeBodyPart();
263
			htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
264
			multipart.addBodyPart(htmlPart);
265
			msg.setContent(multipart);
266
			Transport.send(msg);
267
		} catch (Exception e) {
268
			// If there is any error with normal mail sending, try diving receipients across domains
269
			if (hasMultipleDomains(recipients)) {
270
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
271
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, "", from, password, "");
272
				}
8675 vikram.rag 273
 
9703 vikram.rag 274
				return;
275
			}
276
 
277
			throw new MessagingException(e.getMessage(), e);
278
		}
279
	}
280
 
281
 
8675 vikram.rag 282
	public static void main(String args[]) throws Exception {
10298 manish.sha 283
		String[] sendTo = { "mandeep.dhir@shop2020.in", "mandeep.dhir@gmail.com", "mandeepcse07@yahoo.co.in", "kshitij.sood@shop2020.in" };
8675 vikram.rag 284
		String emailSubjectTxt = "Another test from gmail";
285
		String emailMsgTxt = "Test Message Contents";
286
		String emailFromAddress = "mandeep.dhir@shop2020.in";
287
		String password = "";
288
		String filename = "/home/mandeep/virtual_warehouse.sql";
289
 
290
		GmailUtils utils = new GmailUtils();
291
		utils.sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt, emailFromAddress, password, filename);
292
		System.out.println("Sucessfully Sent mail to All Users");
293
	}
2822 chandransh 294
}