By Alvin Alexander. Last updated: June 6, 2016
Scala doesn't have any special email handling facilities, so I just use my normal Java approach to send mail.
Here's the source code for my Scala 'send email' class. It's basically just a port of my previous Java 'send email' class, and requires the Java Mail API and Activation Framework jar files:
import javax.mail._ import javax.mail.internet._ import java.util.Date import java.util.Properties import scala.collection.JavaConversions._ class MailAgent(to: String, cc: String, bcc: String, from: String, subject: String, content: String, smtpHost: String) { var message: Message = null message = createMessage message.setFrom(new InternetAddress(from)) setToCcBccRecipients message.setSentDate(new Date()) message.setSubject(subject) message.setText(content) // throws MessagingException def sendMessage { Transport.send(message) } def createMessage: Message = { val properties = new Properties() properties.put("mail.smtp.host", smtpHost) val session = Session.getDefaultInstance(properties, null) return new MimeMessage(session) } // throws AddressException, MessagingException def setToCcBccRecipients { setMessageRecipients(to, Message.RecipientType.TO) if (cc != null) { setMessageRecipients(cc, Message.RecipientType.CC) } if (bcc != null) { setMessageRecipients(bcc, Message.RecipientType.BCC) } } // throws AddressException, MessagingException def setMessageRecipients(recipient: String, recipientType: Message.RecipientType) { // had to do the asInstanceOf[...] call here to make scala happy val addressArray = buildInternetAddressArray(recipient).asInstanceOf[Array[Address]] if ((addressArray != null) && (addressArray.length > 0)) { message.setRecipients(recipientType, addressArray) } } // throws AddressException def buildInternetAddressArray(address: String): Array[InternetAddress] = { // could test for a null or blank String but I'm letting parse just throw an exception return InternetAddress.parse(address) } }
I'll add an example that shows how to use this Scala email class at some point in the future, but I hope that's pretty obvious.