Java SendGrid电子邮件API,发送电子邮件附件
我使用sendgrid发送电子邮件,使用以下代码工作正常 但它没有依恋Java SendGrid电子邮件API,发送电子邮件附件,java,sendgrid,Java,Sendgrid,我使用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.SendGr
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,但有一个示例,所以我一直在尝试,直到它起作用,我缩小了一些异常和响应代码,起初我得到了禁止的授权,最好是响应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 codec及其包中的encodeAsString
方法对附件进行编码
org.apache.commons.codec.binary.Base64
甚至内容长度也被重新运行为0,以响应它起作用了这是使用SendGrid API发送附件的方式
Mail mail = createEmail();
Attachments attachments = new Attachments();
Base64 x = new Base64();
String encodedString = x.encodeAsString(loadPdfFromClasspath());
attachments.setContent(encodedString);
attachments.setDisposition("attachment");
attachments.setFilename("xyx.pdf");
attachments.setType("application/pdf");
mail.addAttachments(attachments);
try {
request.method = com.sendgrid.Method.POST;
request.endpoint = "mail/send";
request.body = mail.build();
// Uncomment once connectivity with sendgrid is resolved
Response response = sg.api(request);
}catch (IOException ex) {
throw ex;
}
它对我有用():
您应该从代码中删除密钥示例Yes Thank@IcedDante我已经随机放置了一个不是真实的,我将以任何方式重新随机放置。谢谢,但随电子邮件发送的附件是完整的新表单。在我的例子中,我想发送包含执行结果数据的excel。请告诉我如何从本地系统将文件excel文件作为附件发送。我想它应该是
String attachmentContent=Base64.getEncoder().encodeToString(attachmentContentBytes)
而不是字符串attachmentContent=Base64.getMimeEncoder().encodeToString(attachmentContentBytes)代码>@codetriper,当然可以。From“MIME编码器使用基本字母表以MIME友好格式生成Base64编码的输出。输出的每行长度不超过76个字符,并以回车符结尾,后跟换行符(\r\n)”
Mail mail = createEmail();
Attachments attachments = new Attachments();
Base64 x = new Base64();
String encodedString = x.encodeAsString(loadPdfFromClasspath());
attachments.setContent(encodedString);
attachments.setDisposition("attachment");
attachments.setFilename("xyx.pdf");
attachments.setType("application/pdf");
mail.addAttachments(attachments);
try {
request.method = com.sendgrid.Method.POST;
request.endpoint = "mail/send";
request.body = mail.build();
// Uncomment once connectivity with sendgrid is resolved
Response response = sg.api(request);
}catch (IOException ex) {
throw ex;
}
import com.sendgrid.helpers.mail.objects.Attachments;
import com.sendgrid.helpers.mail.objects.Content;
import com.sendgrid.helpers.mail.objects.Email;
import com.sendgrid.helpers.mail.Mail;
......
Content content = new Content("text/html", body);
Mail mail = new Mail(from, subject, to, content);
Path file = Paths.get(filePath);
Attachments attachments = new Attachments();
attachments.setFilename(file.getFileName().toString());
attachments.setType("application/pdf");
attachments.setDisposition("attachment");
byte[] attachmentContentBytes = Files.readAllBytes(file);
String attachmentContent = Base64.getMimeEncoder().encodeToString(attachmentContentBytes);
attachments.setContent(attachmentContent);
mail.addAttachments(attachments);
SendGrid sg = new SendGrid(apiKey);
Request request = new Request();
request.setMethod(Method.POST);
request.setEndpoint("mail/send");
request.setBody(mail.build());
Response response = sg.api(request);