ですが、こいつは添付ファイルに対応していません。
ここですでに解決が出ているのですが、公式のバージョンではまだ実装されていないので、自分で拡張してしまいましょう。
grails install-plugin mail
でpluginをインストールし、その中の MailService.groovy ファイルを開きます。
このファイルの中に MailMessageBuilder Class の定義がされているのですが、こいつがDSLを処理している部分になります。
(void to とか void title とかその辺りです。)
ここに attachBytes という添付ファイル名、コンテントタイプ、バイト配列を受け取ってメールに添付する処理を追加してやります。
void attachBytes(String fileName, String contentType, byte[] bytes) {
getMessage().mimeMessageHelper.addAttachment(fileName, new ByteArrayResource(bytes), contentType) }
}
このままだと getMessage した時に、以下の部分が呼ばれます
message = new MimeMailMessage(mailSender.createMimeMessage() )
添付ファイルを送る時は Multipart にしないといけないので、以下のように書き換えてやります
message = new MimeMailMessage(new MimeMessageHelper(mailSender.createMimeMessage(), true ))
あとはメール送信時に attachBytes を呼び出してやればOKです。
def file=new File("test.dat")
// ファイル名に日本語が含まれる場合は文字列をエンコードする必要があります
// 日本のメール環境では iso-2022-jp がまだまだ主流なので、iso-2022-jp を使いましょう
//def title=javax.mail.internet.MimeUtility.encodeWord("日本語ファイル名.dat", "utf-8", "B")
def title=javax.mail.internet.MimeUtility.encodeWord("日本語ファイル名.dat", "iso-2022-jp", "B")
// コンテントタイプはファイルや用途に合わせて変更して下さい
def contentType="application/octet-stream"
mailService.sendMail {
to "test@test.jp"
from "test@test.jp"
subject "添付テスト"
body "添付ファイルを送ります"
attachBytes title, contentType , file.readBytes()
}
↑プロポーザル的に書かれているだけで、実装されているわけではないらしいです
2009/5/13 追記
メールタイトルの文字コードと、Mail from Grailsのページについて、mottsniteの中の人から指摘があったので修正
0 件のコメント:
コメントを投稿