ですが、こいつは添付ファイルに対応していません。
ここですでに解決が出ているのですが、公式のバージョンではまだ実装されていないので、自分で拡張してしまいましょう。
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 件のコメント:
コメントを投稿