Subversion Repositories SmartDukaan

Rev

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