```scala
import java.io.File
import com.typesafe.config.ConfigFactory
import play.api.libs.mailer._
class EmailUtils(subject: String, // 邮件主题
toStr: String, // 收件人邮箱 (以逗号连接多个收件人邮箱)
password: String, // 邮件发起者的 密码
bodyText: String, // 邮件正文
bodyHtml: String = "", // HTML 形式的邮件正文(当其与bodyText 共同存在时,会覆盖bodyText的内容)
fromMailer: String = "发起邮件的邮箱号",
attachments: Seq[Attachment] = Seq[Attachment](), // 附件
timeout: Int = 10000,
connectionTimeout: Int = 10000) {
// 创建SMTP服务
def createMailer(host: String,
port: Int,
user: String,
password: String): SMTPMailer = {
val config = new SMTPConfiguration(
host,(邮箱服务地址 【可以上网查对应的host或者公司内部的IP等】)
port, (25 or 21)
false,
false,
false,
Option(user), (发起邮件的用户)
Option(password),(密码)
false,
timeout = Option(timeout), // Try(timeout).toOption
connectionTimeout = Option(connectionTimeout),
ConfigFactory.empty(),
false)
new SMTPMailer(config)
}
val mailer: SMTPMailer = createMailer(host, port , fromMailer, password)
//设置邮件本体
def createEmail(subject: String, //邮件主题
from: String, // 发起人邮箱
to: Seq[String], // 收件人邮箱 及上面的toStr
bodyText: String , // 邮件内容
charset: String = "utf-8",
attachments: Seq[Attachment] = Seq.empty): Email = { //附件
Email(subject,
from,
to,
bodyText = Option[String](bodyText),
charset = Option[String](charset),
attachments = attachments)
}
// 生成附件
def createAttachement(name: String, //附件的名字
fileStr: String = "", // 本地文件的路径
data: Array[Byte] = null,
mimeType: String = "text/plain"): Attachment = {
var attachment: Attachment = null
if (fileStr.contains(":")) {
val file: File = new File(fileStr)
attachment = AttachmentFile(name, file)
} else {
attachment = AttachmentData(name, data, mimeType)
}
attachment
}
//调用方法创建附件
val name1 = "附件为本地文件"
val file = "放入本地的一个文件路径"
val attachment1 = createAttachement(name1, file)
val name2 = "附件为 df 或 hdfs文件或rdd "
val dfByte = spark.sql("select * from aaa")
.collect().map(_.getString(0)).mkString("\n").getBytes()
val attachment2 = createAttachement(name2, "dfByte", dfByte,mimeType)
val attachments = Seq(attachment2)
def getEmail: Email = {
if (attachments.isEmpty) {
createEmail(subject, fromMailer, toStr.split(","), bodyText)
} else {
createEmail(subject, fromMailer, toStr.split(","), bodyText, attachments = attachments)
}
}
val email: Email = getEmail
val bodyHtml: String = // 使用HTML格式时,可以参照这个格式
s"""
|<html>
|<body>
|<h1 align="center"> 邮件正文的标题</h1>
| 邮件正文
|</hoby>
|</html>
|
""".stripMargin
def sendEmail(): String = {
mailer.send(email)
}
}
object EmailUtils {
def apply(subject: String,
toStr: String,
password: String,
bodyText: String): EmailUtils = new EmailUtils(subject, toStr, password, bodyText)
}
需要用到的jar包如下:
play-mailer_2.11-7.0.1.jar
javax.mail-api-1.5.5.jar
javax.mail-1.5.6.jar
javax.inject-1.jar
jakarta-oro-2.0.5.jar
commons-email-1.5.jar
参考的文章没有记录出处,谢谢前人的辛苦付出!
本文章仅供参考