Subversion Repositories SmartDukaan

Rev

Rev 11434 | Rev 12103 | 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 {
40
			Message msg = prepareMessage(recipients, subject, from, password);
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
 
8675 vikram.rag 109
			Message msg = prepareMessage(recipients, subject, from, password);
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
	}
161
 
162
	public void sendSSLMessage(String recipients[], String subject, String message, final String from, final String password, List<File> files) throws MessagingException {
163
		try {
164
			Message msg = prepareMessage(recipients, subject, from, password);
165
 
166
			//Create the multi-part object to hold the text and attachment parts
167
			Multipart multipart = new MimeMultipart();
168
 
169
			// create the message part 
170
			MimeBodyPart messageBodyPart = new MimeBodyPart();
171
			//Part 1: Text message
172
			messageBodyPart.setText(message);
173
			multipart.addBodyPart(messageBodyPart);
174
 
175
			//Part 2: Attachment
176
			for (File file : files) {
177
				DataSource source = new FileDataSource(file);
178
				String[] names = file.getAbsolutePath().split("/");
179
				messageBodyPart = new MimeBodyPart();
180
				messageBodyPart.setDataHandler(new DataHandler(source));
181
				messageBodyPart.setFileName(names[names.length - 1]);
182
				multipart.addBodyPart(messageBodyPart);
183
			}
184
 
185
			// Put parts in message
186
			msg.setContent(multipart);
187
			Transport.send(msg);
188
		} catch (Exception e) {
189
			// If there is any error with normal mail sending, try diving receipients across domains
190
			if (hasMultipleDomains(recipients)) {
191
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
192
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, message, from, password, files);
193
				}
194
 
195
				return;
196
			}
197
 
198
			throw new MessagingException(e.getMessage(), e);
199
		}
200
	}
201
 
202
	@SuppressWarnings("restriction")
203
	private Message prepareMessage(String[] recipients, String subject,
204
			final String from, final String password) throws AddressException,
205
			MessagingException {
206
		boolean debug = true;
207
 
208
		Properties props = new Properties();
209
		props.put("mail.smtp.host", SMTP_HOST_NAME);
210
		props.put("mail.smtp.auth", "true");
211
		props.put("mail.debug", "true");
212
		props.put("mail.smtp.port", SMTP_PORT);
213
		props.put("mail.smtp.socketFactory.port", SMTP_PORT);
214
		props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
215
		props.put("mail.smtp.socketFactory.fallback", "false");
216
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
217
 
218
		Session session = Session.getDefaultInstance(props,
219
				new javax.mail.Authenticator() {
220
 
221
			protected PasswordAuthentication getPasswordAuthentication() {
222
				return new PasswordAuthentication(from, password);
223
			}
224
		});
225
 
226
		session.setDebug(debug);
227
 
228
		Message msg = new MimeMessage(session);
229
 
230
		//Set the from address
231
		InternetAddress addressFrom = new InternetAddress(from);
232
		msg.setFrom(addressFrom);
233
 
234
		//Set the recipients
235
		InternetAddress[] addressTo = new InternetAddress[recipients.length];
236
		for (int i = 0; i < recipients.length; i++) {
237
			addressTo[i] = new InternetAddress(recipients[i]);
238
		}
239
		msg.setRecipients(Message.RecipientType.TO, addressTo);
240
 
241
		//Setting the Subject
242
		msg.setSubject(subject);
243
		return msg;
244
	}
9703 vikram.rag 245
 
246
	public void sendSSLMessage(String recipients[], String subject,final String from, final String password,String htmlContent) throws MessagingException {
247
		try {
248
			Message msg = prepareMessage(recipients, subject, from, password);
249
			//Create the multi-part object to hold the text and attachment parts
250
			Multipart multipart = new MimeMultipart();
251
			MimeBodyPart htmlPart = new MimeBodyPart();
252
			htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
253
			multipart.addBodyPart(htmlPart);
254
			msg.setContent(multipart);
255
			Transport.send(msg);
256
		} catch (Exception e) {
257
			// If there is any error with normal mail sending, try diving receipients across domains
258
			if (hasMultipleDomains(recipients)) {
259
				for (List<String> subReceipients : getReceipientsPerDomain(recipients).values()) {
260
					sendSSLMessage(subReceipients.toArray(new String[0]), subject, "", from, password, "");
261
				}
8675 vikram.rag 262
 
9703 vikram.rag 263
				return;
264
			}
265
 
266
			throw new MessagingException(e.getMessage(), e);
267
		}
268
	}
269
 
270
 
8675 vikram.rag 271
	public static void main(String args[]) throws Exception {
10298 manish.sha 272
		String[] sendTo = { "mandeep.dhir@shop2020.in", "mandeep.dhir@gmail.com", "mandeepcse07@yahoo.co.in", "kshitij.sood@shop2020.in" };
8675 vikram.rag 273
		String emailSubjectTxt = "Another test from gmail";
274
		String emailMsgTxt = "Test Message Contents";
275
		String emailFromAddress = "mandeep.dhir@shop2020.in";
276
		String password = "";
277
		String filename = "/home/mandeep/virtual_warehouse.sql";
278
 
279
		GmailUtils utils = new GmailUtils();
280
		utils.sendSSLMessage(sendTo, emailSubjectTxt, emailMsgTxt, emailFromAddress, password, filename);
281
		System.out.println("Sucessfully Sent mail to All Users");
282
	}
2822 chandransh 283
}