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("[email protected]");
String subject = "Hello World from the SendGrid Java Library!";
Email to = new Email("[email protected]");
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("[email protected]");
String subject = "Hello World from the SendGrid Java Library!";
Email to = new Email("[email protected]");
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);
}
}
}
[〜#〜] fyi [〜#〜]: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}
この問題を解決する秘訣は、コモンズのApacheコーデックを使用して添付ファイルをエンコードすることです commons-codec-1.8.jarand its
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を使用して添付ファイルを送信する方法です。
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;
}
それは私のために動作します( 最新のmavenバージョンSendGrid Java"4.4.1 ):
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);