我正在使用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 。
我正在使用Azure mobile services后端,我可以通过SendGrid成功地发送电子邮件。但是,每次我尝试添加附件时,它都失败了。我从来没有收到过邮件。经过一点研究,我发现我所需要的只是一个虚拟路径。我修改了路径名,但它仍然不工作。 我想不出为什么会失败。 下面是我的代码:
responseerror:禁止在d:\node-projects\ecom\node_modules@sendgrid\client\src\类\client.js:146:29在processTicksAndRejections(internal/process/task_queues.js:93:5){ 代码:403,response:{headers:{server:'nginx',dat
我用竹子来让我的网站访问者填写并发送一份联系表。 我创建了一个服务帐户 我授予它全域权限 我添加了以下范围:https://www.googleapis.com/auth/gmail.addons.current.action.compose https://www.googleapis.com/auth/gmail.addons.current.message.metadatahttps://w
问题内容: 我在理解如何使用Python通过电子邮件发送附件时遇到问题。我已成功通过电子邮件将简单消息通过电子邮件发送。有人可以在电子邮件中说明如何发送附件。我知道在线上还有其他帖子,但是作为Python初学者,我很难理解它们。 问题答案: 这是另一个:
问题内容: 在Swift 的正常情况下,我使用此代码发送邮件。 如何在SwiftUI中实现相同目标? 我需要使用吗? 问题答案: 如前所述,您需要将组件移植到via 。 这是一个简单的实现: 用法 : (在运行iOS 13的iPhone 7 Plus上进行了测试-就像一个护身符) 为Xcode 11.4更新
主要内容:SmtpClient类,示例VB.Net应用程序可发送电子邮件。名称空间包含用于向简单邮件传输协议(SMTP)服务器发送电子邮件以供传送的类。 下表列出了一些常用的类: 编号 类 描述 1 代表电子邮件的附件。 2 将附件存储为电子邮件的一部分。 3 代表电子邮件发件人或收件人的地址。 4 存储与电子邮件关联的电子邮件地址。 5 表示可以使用类发送的电子邮件。 6 允许应用程序使用简单邮件传输协议(SMTP)发送电子邮件。