2007/12/26

Groovyでメール送信用クラス作成

javaではよく使われるjavamailを使った、 groovyによるメール送信クラス作成。

通常は1つのsmtpサーバーしか使用しないと思うので、 このクラスの設定項目を変更して配置すれば、 システム内でのメール送信はカバーできると思います。

必要なライブラリ

javamail.jar

groovyソースコード

import java.util.Properties

import java.io.*
import javax.mail.*
import javax.mail.internet.*
import javax.activation.*


class GenzouServerMail{
    def charset="UTF-8"

    def fromAddress = "※ここにメールアドレスを記入※"

    def senderName = "※ここに送信者名を記入※"


    def send(toAddress, subject, text, filepath){

        Properties p = new Properties()
        p.put("mail.smtp.user", "※ここに送信者メールアドレスを記入※")
        p.put("mail.smtp.host", "※ここにサーバー名を記入※")
        p.put("mail.smtp.port", "465")
        p.put("mail.smtp.starttls.enable", "true")
        p.put("mail.smtp.auth", "true")
        p.put("mail.smtp.debug", "true")
        p.put("mail.smtp.socketFactory.port", "465")
        p.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory")
        p.put("mail.smtp.socketFactory.fallback", "false")

        SecurityManager security = System.getSecurityManager()

        try {
            Authenticator auth = new SMTPAuthenticator()
            Session session = Session.getInstance(p, auth)
            session.debug = true

            def msg = new MimeMessage(session)
            msg.text = text
            msg.subject = subject
            def fromAddr = new InternetAddress(fromAddress, senderName)
            msg.from = fromAddr
            def toAddr1 = new InternetAddress(toAddress)
            msg.setHeader("Content-Type", "text/plain charset=" + charset)
            msg.addRecipient(Message.RecipientType.TO, toAddr1)

            if( filepath != null ){
                def mbp = new MimeBodyPart()
                def fds = new FileDataSource(filepath)
                mbp.dataHandler = new DataHandler(fds)
                mbp.fileName = MimeUtility.encodeWord(fds.getName())
                // 複数のボディを格納するマルチパートオブジェクトを生成
                def mp = new MimeMultipart()
                mp.addBodyPart(mbp)
                // マルチパートオブジェクトをメッセージに設定
                msg.content = mp
            }


            Transport.send(msg)
        } catch (Exception mex) {
            mex.printStackTrace()
        }
    }
}


class SMTPAuthenticator extends javax.mail.Authenticator {

    public PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("※ここにアカウントを記入※", "※ここにパスワードを記入※")
    }
}

0 件のコメント:

コメントを投稿