在邮件中附加CSV

时间:2012-03-01 06:52:10

标签: email grails csv

我想在邮件(grails)中附加一个csv文件

路径中的文件已存在。我使用以下代码

sendMail {
    multipart true
    from "$senderName <$fromAddress>"
    to toAddress
    cc message.cc
    subject message.subject
    body content.plaintext
    html content.html
    attachBytes './web-app/ReadyOrdersFor-${vendor.name}','text/csv', new File('./web-app/ReadyOrdersFor-${vendor.name}').readBytes()
}

提示错误是。
java.io.FileNotFoundException:./ web-app / ReadOrdersFor-$ {fortndor.name} .cv(无此类文件或目录)

这都不会引发同样的错误

attachBytes'./web-app/ReadyOrdersFor-${vendor.name}.csv','text/csv',新文件('./ web-app / ReadyOrdersFor - $ {vendor.name}的.csv')。的ReadBytes()

2 个答案:

答案 0 :(得分:1)

问题是您尝试将文件路径字符串用作GStringImpl,但该字符串用单引号括起来。 GStringImpl在双引号的groovy中原生支持。

你的代码应该是

attachBytes "./web-app/ReadyOrdersFor-${vendor.name}",'text/csv', new File("./web-app/ReadyOrdersFor-${vendor.name}").readBytes()

This link应该可以帮助您理解在groovy中使用单引号和双引号之间的区别。

答案 1 :(得分:0)

使用Spring ResourceLoader界面,而不是尝试使用File获取new File(path)引用。 ApplicationContext实现了这个接口,所以你可以从控制器(例如)获得对它的引用,如下所示:

class MyController implements ApplicationContextAware {

  private ResourceLoader resourceLoader

  void setApplicationContext(ApplicationContext applicationContext) {
    resourceLoader = applicationContext  
  }

  def someAction() {
    String path = "classpath:/ReadyOrdersFor-${vendor.name}"
    File csvFile = resourceLoader.getResource(path).file
  }
}

我不是100%确定上面的path值是否正确,您可能需要删除'/'