如何动态生成CSV文件并附加到电子邮件中

时间:2016-02-25 13:06:00

标签: jsp servlet-3.0

请帮助我。

我的问题是,我使用printwriter对象生成(创建)csv文件,将一些数据写入csv文件,并且一次将此csv文件附加到电子邮件中。 当我的代码执行时,csv文件生成成功,我收到附件csv文件的电子邮件,但csv内容不是可读格式。

所以请帮帮我怎么办?

public void SendMail(HttpServletRequest req, HttpServletResponse resp) throws MessagingException, IOException {

    String filename = "Testcsv.csv";
    resp.setHeader("Content-Type", "text/csv");
    resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");

    PrintWriter fw = ((ServletResponse) resp).getWriter(); 
    fw.append("#");
    fw.append(',');
    fw.append("Product code");
    fw.append(',');
    fw.append("Product");
    fw.append('\n');
    fw.append("1");
    fw.append(',');
    fw.append("12345");
    fw.append(',');
    fw.append("testing");
    fw.append('\n');
    fw.flush();
    fw.close();

    String csvFile = fw.toString();

    String host = "smtp.gmail.com";
   //String host = "localhost";
    String from = "emailaddress";
    String toAddress = "emailaddress";
    // Get system properties
    Properties props = System.getProperties();
    props.put("mail.smtp.host", host);
    Session session = Session.getInstance(props, null);
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(from));
    message.setRecipients(Message.RecipientType.TO, toAddress);
    message.setSubject("JavaMail Attachment");
    BodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setText("Here's the file");
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    messageBodyPart = new MimeBodyPart();
    messageBodyPart.setDataHandler(new DataHandler(new ByteArrayDataSource(csvFile.getBytes(),"text/csv")));
    messageBodyPart.setFileName("testcsv.csv");
    multipart.addBodyPart(messageBodyPart);

    message.setContent(multipart);

    try {
        Transport.send(message);
        System.out.println("Mail Sent Successfully");
    } catch (SendFailedException sfe) {
        System.out.println(sfe);
    }
  }

1 个答案:

答案 0 :(得分:1)

不使用PrintWriter,而是使用StringBuilder或只使用字符串。我试过这个并且有效。

希望它会有用。

var employeeViewModel = function(data) {
    var self = this;

    self.id = ko.observable(data.id);
    self.name = ko.observable(data.name);
    self.activebool = ko.observable(data.activebool);

    self.openEditbox = function() {
        console.log('2');
    }

}

var employeesViewModel = function (data) {
    var self = this;

    self.employees = ko.observableArray().paged(20);

    var employees = ko.utils.arrayMap(data, function (employee) {
        return new employeeViewModel(employee);
    })
    self.employees(employees);

    self.openEditbox = function() {
        console.log('1');
    }
}

var data = @Html.HtmlConvertToJson(Model);
ko.applyBindings(new employeesViewModel(data));