final List sourcesList = new ArrayList();
final MimeMessage message = new MimeMessage(this.session);
if (this.from == null) {
throw new AddressException("No from address");
} else {
try {
message.setFrom(new InternetAddress(this.from));
} catch (AddressException e) {
throw new AddressException("Invalid from address: " + this.from + ": " +
e.getMessage());
}
}
if (this.to == null) {
throw new AddressException("no to address");
} else {
try {
message.setRecipients(RecipientType.TO,
InternetAddress.parse(this.to));
} catch (AddressException e) {
throw new AddressException("Invalid to address: " + this.to + ": " +
e.getMessage());
}
}
if (this.replyTo != null) {
try {
message.setReplyTo(InternetAddress.parse(this.replyTo));
} catch (AddressException e) {
throw new AddressException("Invalid replyTo address: " + this.replyTo + ": " +
e.getMessage());
}
}
if (this.cc != null) {
try {
message.setRecipients(RecipientType.CC,
InternetAddress.parse(this.cc));
} catch (AddressException e) {
throw new AddressException("Invalid cc address: " + this.cc + ": " +
e.getMessage());
}
}
if (this.bcc != null) {
try {
message.setRecipients(RecipientType.BCC,
InternetAddress.parse(this.bcc));
} catch (AddressException e) {
throw new AddressException("Invalid bcc address: " + this.bcc + ": " +
e.getMessage());
}
}
if (this.subject != null) {
message.setSubject(this.subject);
}
message.setSentDate(new Date());
Attachment a = null;
try {
if (this.attachments.isEmpty()) {
if (this.src != null) {
DataSource ds = null;
Source source = resolver.resolveURI(this.src);
sourcesList.add(source);
if (source.exists()) {
ds =
new SourceDataSource(
source,
(this.srcMimeType == null
? source.getMimeType()
: this.srcMimeType),
this.src.substring(this.src.lastIndexOf('/') + 1));
}
message.setDataHandler(new DataHandler(ds));
} else if (this.body != null) {
if (this.charset != null) {
message.setText(this.body, this.charset);
} else {
message.setText(this.body);
}
}
} else {
Multipart multipart = new MimeMultipart();
BodyPart bodypart = new MimeBodyPart();
multipart.addBodyPart(bodypart);
message.setContent(multipart);
if (this.src != null) {
DataSource ds = null;
Source source = resolver.resolveURI(this.src);
sourcesList.add(source);
if (source.exists()) {
ds =
new SourceDataSource(
source,
(this.srcMimeType == null
? source.getMimeType()
: this.srcMimeType),
this.src.substring(this.src.lastIndexOf('/') + 1));
}
bodypart.setDataHandler(new DataHandler(ds));
bodypart.setFileName(ds.getName());
} else if (this.body != null) {
bodypart.setText(this.body);
}
for (Iterator i = this.attachments.iterator(); i.hasNext();) {
a = (Attachment) i.next();
DataSource ds = null;
if (a.isURL) {
String name = (String) a.getObject();
Source src = resolver.resolveURI(name);
sourcesList.add(src);
if (src.exists()) {
ds =
new SourceDataSource(
src,
a.getType(src.getMimeType()),
a.getName(name.substring(name.lastIndexOf('/') + 1)));
}
} else {
if (a.getObject() instanceof Part) {
Part part = (Part) a.getObject();
ds =
new FilePartDataSource(
part,
a.getType(part.getMimeType()),
a.getName(part.getUploadName()));
} else {
// TODO: other classes?
throw new AddressException("Not yet supported: " + a.getObject());
}
}
bodypart = new MimeBodyPart();
bodypart.setDataHandler(new DataHandler(ds));
bodypart.setFileName(ds.getName());
multipart.addBodyPart(bodypart);
}
}
message.saveChanges();
Transport.send(message);
} catch (MessagingException me) {
throw new MessagingException(me.getMessage());
} catch (MalformedURLException e) {
throw new AddressException("Malformed attachment URL: " +
a.getObject() + " error " + e.getMessage());
} catch (IOException e) {
throw new AddressException("IOException accessing attachment URL: " +
a.getObject() + " error " + e.getMessage());
} finally {
if (sourcesList != null) {
for (Iterator j = sourcesList.iterator(); j.hasNext();) {
resolver.release((Source) j.next());