SendGrid отправил новую копию вложения вместо локального файла - PullRequest
0 голосов
/ 30 октября 2018

Я хочу отправить динамически сгенерированный файл Excel программно с помощью функции sendgrid. Ниже программа Java успешно отправляет файл Excel в виде вложения, но отправляет свежую копию (только что созданную) файла Excel, а не файл, который мне нравится отправлять. Пожалуйста, дайте мне знать, где я делаю ошибку?

public static void main (String [] args) выдает IOException, InvalidFormatException {

    final String path = "C:\\Users\\src\\testData\\TestData.xlsx";

    byte[] bFile = Files.readAllBytes(new File(path).toPath());

    Attachments attachments3 = new Attachments();
    Base64 x = new Base64();
    String imageDataString = x.encodeAsString(bFile);
    attachments3.setContent(imageDataString);
    attachments3.setType("xlxs");// "application/pdf"
    attachments3.setFilename("TestData.xlsx");
    attachments3.setDisposition("attachment");
    attachments3.setContentId("Banner");

    Email from = new Email("ranjit@test.com");
    String subject = "Hello World from the SendGrid Java Library!";

    Email to = new Email("sachin@test.com");
    Content content = new Content("text/plain", "Hello, Email!");
    Mail mail = new Mail(from, subject, to, content);
    mail.addAttachments(attachments3);

    SendGrid sg = new SendGrid("SG.EJLRKZEvE");
    Request request = new Request();
    try {

        request.setMethod(Method.POST);
        request.setEndpoint("mail/send");
        request.setBody(mail.build());

        Response response = sg.api(request);
        System.out.println(response.getStatusCode());
        System.out.println(response.getBody());
        System.out.println(response.getHeaders());

    } catch (IOException ex) {
        throw ex;
    }
}

1 Ответ

0 голосов
/ 31 октября 2018

Я написал следующий тестовый класс и успешно отправил / получил электронное письмо с вложением Excel с контентом. Код такой же, как у вас, за исключением типа, установленного в объекте вложения. Вставьте здесь весь класс, чтобы вы тоже могли проверить импорт. Я использую sendgrid-java версии 4.3.0. Обязательно перейдите на версию 4.3.0, прежде чем тестировать этот код. Я также обрезал свой ключ API ниже, поэтому замените его своим ключом API.

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;

import org.apache.commons.codec.binary.Base64;

import com.sendgrid.Attachments;
import com.sendgrid.Content;
import com.sendgrid.Email;
import com.sendgrid.Mail;
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;

public class TestSGEmail {
  public static void main(String args[]) {

    final String path = "/Users/macuser/testxls.xlsx";

    byte[] bFile = null;
    try {
      bFile = Files.readAllBytes(new File(path).toPath());
    } catch (IOException e) {
      e.printStackTrace();
    }

    Attachments attachments3 = new Attachments();
    Base64 x = new Base64();
    String imageDataString = x.encodeAsString(bFile);
    attachments3.setContent(imageDataString);
    attachments3.setType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    attachments3.setFilename("TestData.xlsx");
    attachments3.setDisposition("attachment");
    attachments3.setContentId("Banner");

    Email from = new Email("test@example.com");
    String subject = "Hello World from the SendGrid Java Library!";

    Email to = new Email("myemail@example.com");

    Content content = new Content("text/plain", "Hello, Email!");
    Mail mail = new Mail(from, subject, to, content);

    mail.addAttachments(attachments3);

    SendGrid sg = new SendGrid("SG.tGX184I");

    Request request = new Request();
    try {
      request.setMethod(Method.POST);
      request.setEndpoint("mail/send");
      request.setBody(mail.build());

      Response response = sg.api(request);
      System.out.println(response.getStatusCode());
      System.out.println(response.getBody());
      System.out.println(response.getHeaders());

    } catch (IOException ex) {
      ex.printStackTrace();
    }
  }
}

Надеюсь, это поможет!

...