spark程式发送邮件方法整合


```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

参考的文章没有记录出处,谢谢前人的辛苦付出!
本文章仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值