使用scala和Liftweb发送带附件的电子邮件

时间:2013-11-22 07:26:10

标签: scala lift

这是我第一次将电子邮件服务与liftweb集成

我想发送带附件的电子邮件(例如: - Documents,Images,Pdfs) 我的代码如下所示

       case class CSVFile(bytes: Array[Byte],filename: String = "file.csv",
                     mime: String = "text/csv; charset=utf8; header=present" )

       val attach = CSVFile(fileupload.mkString.getBytes("utf8"))

       val body = <p>Please research the enclosed.</p>

       val msg = XHTMLPlusImages(body,
                  PlusImageHolder(attach.filename, attach.mime, attach.bytes)) 

      Mailer.sendMail(
      From("vyz@gmail.com"),
      Subject(subject(0)),
      To(to(0)),
     )

此代码取自LiftCookbook,它不像我的要求那样工作 它的工作,但只有附加的文件名来了(file.csv)没有数据(我上传了这个文件(gsy.docx))

最诚挚的问候 GSY

1 个答案:

答案 0 :(得分:1)

您没有指定fileupload类型,但假设它属于net.liftweb.http. FileParamHolder类型,则问题是您不能只调用mkString并期望它有任何类型fileStream数据,因为对象中没有数据,只有一个val data = { val os = new ByteArrayOutputStream() IOUtils.copy(fileupload.fileStream, os) os.toByteArray } val attach = CSVFile(data) 方法用于检索它(从磁盘或内存)。

最容易实现的目标是使用ByteArrayInputStream并将数据复制到其中。我没有测试过,但下面的代码可以解决您的问题。为简洁起见,它使用Apache IO Commons来复制流,但您可以轻松地在本地执行此操作。

csv

顺便说一句,你说你正在上传一个Word(DOCX)文件,并期望在更改扩展名时它自动为CSV?除非您实际进行了一些转换,否则您只会获得一个{{1}}扩展名的DOCX文件。