/*
* Copyright (C) 2004-2008 Jive Software. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.xmpp.workgroup.utils;
import java.rmi.server.UID;
import java.util.Date;
import java.util.Properties;
import java.util.StringTokenizer;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SendMail {
private static final Logger Log = LoggerFactory.getLogger(SendMail.class);
private String toField;
private String subjectField;
private String messageText;
private String myAddress;
private String attachmentFile;
private String customerName;
private boolean isHTML = false;
public boolean sendMessage(String message, String host, String port, String username, String password) {
boolean ok = false;
String uidString = "";
try {
// Set the email properties necessary to send email
final Properties props = System.getProperties();
props.put("mail.smtp.host", host);
props.put("mail.transport.protocol", "smtp");
props.put("mail.server", host);
if (ModelUtil.hasLength(port)) {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", port);
}
Session sess;
if (ModelUtil.hasLength(password) && ModelUtil.hasLength(username)) {
sess = Session.getInstance(props, new MailAuthentication(username, password));
}
else {
sess = Session.getDefaultInstance(props, null);
}
Message msg = new MimeMessage(sess);
StringTokenizer toST = new StringTokenizer(toField, ",");
if (toST.countTokens() > 1) {
InternetAddress[] address = new InternetAddress[toST.countTokens()];
int addrIndex = 0;
String addrString = "";
while (toST.hasMoreTokens()) {
addrString = toST.nextToken();
address[addrIndex] = (new InternetAddress(addrString));
addrIndex = addrIndex + 1;
}
msg.setRecipients(Message.RecipientType.TO, address);
}
else {
InternetAddress[] address = {new InternetAddress(toField)};
msg.setRecipients(Message.RecipientType.TO, address);
}
InternetAddress from = new InternetAddress(myAddress);
msg.setFrom(from);
msg.setSubject(subjectField);
UID msgUID = new UID();
uidString = msgUID.toString();
msg.setHeader("X-Mailer", uidString);
msg.setSentDate(new Date());
MimeMultipart mp = new MimeMultipart();
// create body part for textarea
MimeBodyPart mbp1 = new MimeBodyPart();
if (getCustomerName() != null) {
messageText = "From: " + getCustomerName() + "\n" + messageText;
}
if (isHTML) {
mbp1.setContent(messageText, "text/html");
}
else {
mbp1.setContent(messageText, "text/plain");
}
mp.addBodyPart(mbp1);
try {
if (!isHTML) {
msg.setContent(messageText, "text/plain");
}
else {
msg.setContent(messageText, "text/html");
}
Transport.send(msg);
ok = true;
}
catch (SendFailedException sfe) {
Log.warn("Could not connect to SMTP server.");
}
}
catch (Exception eq) {
Log.warn("Could not connect to SMTP server.");
}
return ok;
}
class MailAuthentication extends Authenticator {
String smtpUsername = null;
String smtpPassword = null;
public MailAuthentication(String username, String password) {
smtpUsername = username;
smtpPassword = password;
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(smtpUsername, smtpPassword);
}
}
public void setToField(String toField) {
this.toField = toField;
}
public String getToField() {
return toField;
}
public void setSubjectField(String subjectField) {
this.subjectField = subjectField;
}
public String getSubjectField() {
return subjectField;
}
public void setMessageText(String messageText) {
this.messageText = messageText;
}
public String getMessageText() {
return messageText;
}
public void setMyAddress(String myAddress) {
this.myAddress = myAddress;
}
public String getMyAddress() {
return myAddress;
}
public void setAttachmentFile(String attachmentFile) {
this.attachmentFile = attachmentFile;
}
public String getAttachmentFile() {
return attachmentFile;
}
public void setCustomerName(String customerName) {
this.customerName = customerName;
}
public String getCustomerName() {
return customerName;
}
public void setHTML(boolean isHTML) {
this.isHTML = isHTML;
}
public boolean getHTML() {
return isHTML;
}
}