diff --git a/src/gaea.app/build.gradle b/src/gaea.app/build.gradle index 33766b2..792ff98 100644 --- a/src/gaea.app/build.gradle +++ b/src/gaea.app/build.gradle @@ -1,6 +1,7 @@ dependencies { compile project(":src:gaea") compile("org.springframework.boot:spring-boot-starter-web:$spring_version") + compile("org.springframework.boot:spring-boot-starter-mail:$spring_version") compile group: 'net.sf.dozer', name: 'dozer', version: '5.5.1' } diff --git a/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/EmailMessenger.kt b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/EmailMessenger.kt new file mode 100644 index 0000000..94b3b16 --- /dev/null +++ b/src/gaea.app/src/main/kotlin/com/synebula/gaea/app/component/EmailMessenger.kt @@ -0,0 +1,78 @@ +package com.synebula.gaea.app.component + +import com.synebula.gaea.io.messager.IEmailMessenger +import com.synebula.gaea.log.ILogger +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.core.io.FileSystemResource +import org.springframework.mail.javamail.JavaMailSenderImpl +import org.springframework.mail.javamail.MimeMessageHelper +import org.springframework.stereotype.Component +import java.io.File + +@Component +class EmailMessenger : IEmailMessenger { + private var mailSender = JavaMailSenderImpl() + + @Value("\${mail.host}") + var host = "" + + @Value("\${mail.port}") + var port = "" + + @Value("\${mail.sender}") + var sender = "" + + @Value("\${mail.username}") + var username = "" + + @Value("\${mail.password}") + var password = "" + + @Autowired + lateinit var logger: ILogger + + /** + * 发送消息 + * + * @param subject 邮件标题 + * @param content 邮件内容,支持html + * @param receivers 邮件接受者 + * @param files 附件 + */ + override fun sendMessage(subject: String, content: String, receivers: List, files: Map) { + this.check() + mailSender.host = host + mailSender.username = username + mailSender.password = password + mailSender.port = if (port.isEmpty()) port.toInt() else 25 + receivers.forEach { + try { + val mail = mailSender.createMimeMessage() + val mimeMessageHelper = MimeMessageHelper(mail) + mimeMessageHelper.setFrom(sender) + mimeMessageHelper.setTo(it) + mimeMessageHelper.setSubject(subject) + mimeMessageHelper.setText(content) + files.forEach { (name, path) -> + val file = FileSystemResource(File(path)) + mimeMessageHelper.addAttachment(name, file) + } + mailSender.send(mail) //发送 + } catch (e: Exception) { + logger.error(e, "发送邮件[$subject]至地址[$it]失败") + } + } + } + + private fun check() { + if (this.host.isEmpty()) + throw RuntimeException("邮件Host信息没有配置, 请配置项: mail.host") + if (this.username.isEmpty()) + throw RuntimeException("邮件用户名信息没有配置, 请配置项: mail.username") + if (this.password.isEmpty()) + throw RuntimeException("邮件密码信息没有配置, 请配置项: mail.password") + if (this.sender.isEmpty()) + throw RuntimeException("邮件发送人信息没有配置, 请配置项: mail.sender") + } +} \ No newline at end of file diff --git a/src/gaea/src/main/kotlin/com/synebula/gaea/io/messager/IEmailMessenger.kt b/src/gaea/src/main/kotlin/com/synebula/gaea/io/messager/IEmailMessenger.kt index ae9fd4e..c167384 100644 --- a/src/gaea/src/main/kotlin/com/synebula/gaea/io/messager/IEmailMessenger.kt +++ b/src/gaea/src/main/kotlin/com/synebula/gaea/io/messager/IEmailMessenger.kt @@ -1,5 +1,14 @@ package com.synebula.gaea.io.messager interface IEmailMessenger { - fun sendMessage(receivers: List, subject: String, content: String) + /** + * 发送消息 + * + * @param subject 邮件标题 + * @param content 邮件内容 + * @param receivers 邮件接受者 + * @param files 附件 + */ + fun sendMessage(subject: String, content: String, + receivers: List, files: Map = mapOf()) } \ No newline at end of file