in src/main/java/org/apache/commons/mail/Email.java [1317:1446]
public void buildMimeMessage() throws EmailException
{
if (this.message != null)
{
// [EMAIL-95] we assume that an email is not reused therefore invoking
// buildMimeMessage() more than once is illegal.
throw new IllegalStateException("The MimeMessage is already built.");
}
try
{
this.message = this.createMimeMessage(this.getMailSession());
if (EmailUtils.isNotEmpty(this.subject))
{
if (EmailUtils.isNotEmpty(this.charset))
{
this.message.setSubject(this.subject, this.charset);
}
else
{
this.message.setSubject(this.subject);
}
}
// update content type (and encoding)
this.updateContentType(this.contentType);
if (this.content != null)
{
if (EmailConstants.TEXT_PLAIN.equalsIgnoreCase(this.contentType)
&& this.content instanceof String)
{
// EMAIL-104: call explicitly setText to use default mime charset
// (property "mail.mime.charset") in case none has been set
this.message.setText(this.content.toString(), this.charset);
}
else
{
this.message.setContent(this.content, this.contentType);
}
}
else if (this.emailBody != null)
{
if (this.contentType == null)
{
this.message.setContent(this.emailBody);
}
else
{
this.message.setContent(this.emailBody, this.contentType);
}
}
else
{
this.message.setText("");
}
if (this.fromAddress != null)
{
this.message.setFrom(this.fromAddress);
}
else
{
if (session.getProperty(EmailConstants.MAIL_SMTP_FROM) == null
&& session.getProperty(EmailConstants.MAIL_FROM) == null)
{
throw new EmailException("From address required");
}
}
if (this.toList.size() + this.ccList.size() + this.bccList.size() == 0)
{
throw new EmailException("At least one receiver address required");
}
if (!this.toList.isEmpty())
{
this.message.setRecipients(
Message.RecipientType.TO,
this.toInternetAddressArray(this.toList));
}
if (!this.ccList.isEmpty())
{
this.message.setRecipients(
Message.RecipientType.CC,
this.toInternetAddressArray(this.ccList));
}
if (!this.bccList.isEmpty())
{
this.message.setRecipients(
Message.RecipientType.BCC,
this.toInternetAddressArray(this.bccList));
}
if (!this.replyList.isEmpty())
{
this.message.setReplyTo(
this.toInternetAddressArray(this.replyList));
}
if (!this.headers.isEmpty())
{
for (final Map.Entry<String, String> entry : this.headers.entrySet())
{
final String foldedValue = createFoldedHeaderValue(entry.getKey(), entry.getValue());
this.message.addHeader(entry.getKey(), foldedValue);
}
}
if (this.message.getSentDate() == null)
{
this.message.setSentDate(getSentDate());
}
if (this.popBeforeSmtp)
{
// TODO Why is this not a Store leak? When to close?
final Store store = session.getStore("pop3");
store.connect(this.popHost, this.popUsername, this.popPassword);
}
}
catch (final MessagingException me)
{
throw new EmailException(me);
}
}