SendGrid电子邮件API,发送电子邮件附件

我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。

package sendgrid;

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;

import java.io.IOException;

public class SendEmail {

public static void main(String[] args) throws IOException {

Email from = new Email("test@example.com");

String subject = "Hello World from the SendGrid Java Library!";

Email to = new Email("shareef@gmail.com");

Content content = new Content("text/plain", "Hello, Email!");

Mail mail = new Mail(from, subject, to, content);

SendGrid sg = new SendGrid("SG.rIEh84OgQBybYEJcOMie1wd.AZqqdWNYXbOqTarUJcG-iSg0UtHJtCto4oe6tVzn6es");

Request request = new Request();

try {

request.method = Method.POST;

request.endpoint = "mail/send";

request.body = mail.build();

Response response = sg.api(request);

System.out.println(response.statusCode);

System.out.println(response.body);

System.out.println(response.headers);

} catch (IOException ex) {

throw ex;

}

}

}

但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub

sendgrid,所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送电子邮件和附件的任何方式,但是当您打开附件时,附件的大小为零,说无法打开或预览文件!

 package sendgrid;

import com.sendgrid.Attachments;

import com.sendgrid.Content;

import com.sendgrid.Email;

import com.sendgrid.Mail;

import com.sendgrid.MailSettings;

import com.sendgrid.Method;

import com.sendgrid.Request;

import com.sendgrid.SendGrid;

import com.sendgrid.Setting;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

public class SendEmailAttachmentV2 {

public static void main(String[] args) throws IOException {

sendmail();

}

// Fully populated Mail object

public static void sendmail() throws IOException {

com.sendgrid.Response response1;

Email from = new Email("shareef@gmail.com");

String subject = "Hello World from the SendGrid Java Library!";

Email to = new Email("shareef@gmail.com");

Content content = new Content("text/plain", "Hello, Email!");

Mail mail = new Mail(from, subject, to, content);

File file = new File("C:\\x.png");

byte[] fileData = null;

try {

fileData = org.apache.commons.io.IOUtils.toByteArray(new FileInputStream(file));

} catch (IOException ex) {

}

Attachments attachments3 = new Attachments();

attachments3.setContent(new String(fileData, 0, (int) file.length(), "UTF-8"));

attachments3.setType("image/png");//"application/pdf"

attachments3.setFilename("x.png");

attachments3.setDisposition("attachment");

attachments3.setContentId("Banner");

mail.addAttachments(attachments3);

MailSettings mailSettings = new MailSettings();

Setting sandBoxMode = new Setting();

sandBoxMode.setEnable(true);

mailSettings.setSandboxMode(sandBoxMode);

SendGrid sg = new SendGrid("SG.1Hg78VK0TJ6kexUnByZUYg.LAa5A4GufssZ9lpPQdV6PcZCY6SZ9Xq6LvqfMRG0wesKw");

Request request1 = new Request();

try {

request1.method = Method.POST;

request1.endpoint = "mail/send";

request1.body = mail.build();

response1 = sg.api(request1);

System.out.println(response1.statusCode);

System.out.println(response1.body);

System.out.println(response1.headers);

} catch (IOException ex) {

System.out.println(ex);

}

}

}

:使用从sendgrid控制台生成的生成的API密钥

回答:

当我执行代码时,我在netbeans的日志中收到以下消息

 202

{X-Frame-Options=DENY, Server=nginx, Connection=keep-alive,

X-Message-Id=vqVw2RtUShSVQ_ymVEVqaw, Content-Length=0, Date=Tue, 26

Jul 2016 20:05:54 GMT, Content-Type=text/plain; charset=utf-8}

解决此问题的技巧是使用commons apache编解码器commons-

codec-1.8.jar及其encodeAsString包中的方法对附件进行编码

org.apache.commons.codec.binary.Base64

Attachments attachments3 = new Attachments();

Base64 x = new Base64();

String imageDataString = x.encodeAsString(fileData);

attachments3.setContent(imageDataString);

attachments3.setType("image/png");//"application/pdf"

attachments3.setFilename("x.png");

attachments3.setDisposition("attachment");

attachments3.setContentId("Banner");

mail.addAttachments(attachments3);

作为响应 即使content-length也被设置为0 。

以上是 SendGrid电子邮件API,发送电子邮件附件 的全部内容, 来源链接: utcz.com/qa/413481.html

回到顶部