当前位置: 首页 > 面试题库 >

通过Gmail API发送带有纯文本后备格式的HTML电子邮件

夹谷浩宕
2023-03-14
问题内容

在回答的问题表明,在电子邮件正文中添加html-markup可以解决问题。该解决方案正确吗?

但是,如果收件人的电子邮件服务器/客户端不支持HTML电子邮件怎么办?

例如,当使用Apache Commons email时,我将执行以下操作:

// set the html message
email.setHtmlMsg("<html>Our logo - <img src=\"cid:"+cid+"\"></html>");
// set the alternative message
email.setTextMsg("Your email client does not support HTML messages");

如果收件人电子邮件服务器/客户端不支持HTML,有什么方法可以告诉Gmail API退回哪些电子邮件?

PS我对Java代码示例特别感兴趣。

谢谢


问题答案:

要提供两种选择,您可以将设置为Content-Typemixed/alternative而不是text/plaintext/html

如果我们想尝试了这一点,在API
Explorer中
,我们只是使用Base64编码的邮件,并使其安全网址,所有替换/_和所有+-

在开发者控制台中:

btoa(
  "Subject: Example Subject\r\n" +
  "From: <example@gmail.com>\r\n" +
  "To: <example@gmail.com>\r\n" +
  "Content-Type: multipart/alternative; boundary=\"foo_bar\"\r\n\r\n" +

  "--foo_bar\r\n" +
  "Content-Type: text/plain; charset=UTF-8\r\n\r\n" +

  "*Bold example message text*\r\n\r\n" +

  "--foo_bar\r\n" +
  "Content-Type: text/html; charset=UTF-8\r\n\r\n" +

  "<div dir=\"ltr\"><b>Bold example message text</b></div>\r\n\r\n" +

  "--foo_bar--" 
).replace(/\+/g, '-').replace(/\//g, '_');

POST https://www.googleapis.com/gmail/v1/users/me/messages/send?access_token={YOUR_API_KEY}

{
 "raw": "U3ViamVjdDogRXhhbXBsZSBTdWJqZWN0DQpGcm9tOiA8ZXhhbXBsZUBnbWFpbC5jb20-DQpUbzogPGV4YW1wbGVAZ21haWwuY29tPg0KQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSJmb29fYmFyIg0KDQotLWZvb19iYXINCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOA0KDQoqQm9sZCBleGFtcGxlIG1lc3NhZ2UgdGV4dCoNCg0KLS1mb29fYmFyDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOA0KDQo8ZGl2IGRpcj0ibHRyIj48Yj5Cb2xkIGV4YW1wbGUgbWVzc2FnZSB0ZXh0PC9iPjwvZGl2Pg0KDQotLWZvb19iYXItLQ=="
}

要在Java中执行等效操作,您可以执行以下操作:

Message message = new MimeMessage(session);
Multipart multiPart = new MimeMultipart("alternative");

MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(text, "utf-8");

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(html, "text/html; charset=utf-8");

multiPart.addBodyPart(textPart); 
multiPart.addBodyPart(htmlPart);
message.setContent(multiPart);

ByteArrayOutputStream output = new ByteArrayOutputStream();
message.writeTo(output);
String rawEmail = Base64.encodeBase64URLSafeString(output.toByteArray());

Message message = new Message();
message.setRaw(rawEmail);
message = service.users().messages().send(userId, message).execute();


 类似资料:
  • 是否有一种方法可以使用Python的Win32com.client(它利用Outlook2007/2010)发送HTML格式的电子邮件。我现在使用的格式如下所示: 这将使用Outlook向指定的收件人发送一封电子邮件,该电子邮件来自当前经过身份验证的用户,带有主题、内容和附加的图像。

  • 我已经编写了一个代码通过java mail API发送,所有的工作都很好,但是我发送的纯文本以可下载附件的形式被收件人接收,而不是纯文本消息。 我不知道为什么会这样。下面给出的是我运行时的代码及其输出。 我使用过Java Mail API、NetBeans IDE、Glassfish服务器、Enterprise Java Bean。 结果如下: 邮件收件人-看,简单的短信是附件的形式。

  • 我的目标是:通过SMTP发送带有纯文本、文本/html和附件的事务性电子邮件。 我的代码:用JavaMail实现 我的问题是:它在hotmail或outlook上看起来不错。但在gmail上,如果是一封带有电子邮件地址的邮件,它不会正确显示邮件正文。txt附件(如果附件是图像,则可以正常工作) 任何帮助都将不胜感激。 以下是我的原始SMTP输出: 一些截图 只送了一个。附件。消息正文不显示,附件重

  • 问题内容: 如何使用PHP发送带有图片的HTML格式的电子邮件? 我想要一个带有一些设置和HTML输出的页面,该页面通过电子邮件发送到一个地址。我该怎么办? 主要问题是附加文件。我怎样才能做到这一点? 问题答案: 非常简单,将图像保留在服务器上,然后将PHP + CSS发送给它们… 正是这一行告诉邮件发件人和收件人,该电子邮件包含(希望)格式正确的HTML,需要对其进行解释: 这是我获得信息的链接

  • 如何使用PHP发送带有图片的HTML格式的电子邮件? 我想有一个网页与一些设置和HTML输出,通过电子邮件发送到一个地址。我该怎么办? 主要问题是附加文件。我怎么能那样做?

  • 以下是从您的计算机发送HTML电子邮件的示例。 在这里,我们使用了JangoSMPT服务器,通过该服务器将电子邮件发送到我们的目标电子邮件地址。 环境设置章节中介绍了该设置 。 此示例与发送简单电子邮件非常相似,不同之处在于,我们使用setContent()方法设置第二个参数为“text/html”的内容,以指定HTML内容包含在消息中。 使用此示例,您可以发送与您喜欢的HTML内容一样大的内容。