对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上
Posted
技术标签:
【中文标题】对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上【英文标题】:png images in html content are not showing up on gmail client for the email sent from java program 【发布时间】:2021-11-17 21:31:03 【问题描述】:我正在尝试使用 sendgrid 将 html 内容从 java 程序发送到 gmail/outlook。
我在 html 中使用 base64 代码代替图像,并且 Outlook 上的电子邮件按预期正确显示,但在 gmail 上,由于 base 64 图像代码而被剪裁。
在我尝试了下面 html 中给出的 png 图像路径之后。现在在 gmail 上,内容正在显示,但图像是空白的。我该如何解决这个问题。
下面是html和代码。
<table border="0" cellspacing="0" cellpadding="0" class="em_full_wrap" bgcolor="#ffffff" style="table-layout:fixed;">
<tr>
<td align="center" valign="top"><table align="center" border="0" cellspacing="0" cellpadding="0" class="em_main_table" style="width:600px; table-layout:fixed;">
<tr>
<td align="center" valign="top" ><a href="https://www.testexample.com/" target="_blank" style="text-decoration: none;"><img src="emails/header_img.png" label="testexample_header" border="0" style="display: block; max-width: 600px; font-family: Arial, sans-serif; font-size: 14px; line-height: 16px; color: #000000;" class="em_full_img" /></a></td>
</tr>
</table></td>
我正在使用以下代码发送电子邮件。
EmailParams emailParams = new EmailParams();
Content content = new Content();
content.setType("text/html");
content.setValue("<htmlcontent as a string>");
List<Content> contents = new ArrayList<Content>();
contents.add(content);
EmailObject from = new EmailObject();
from.setEmail("no-reply@testexample.com");
EmailObject to = new EmailObject();
to.setEmail("test@gmail.com");
List<EmailObject> tos = new ArrayList<EmailObject>();
tos.add(to);
Personalization personalization = new Personalization();
personalization.setSubject("subject");
personalization.setTo(tos);
List<Personalization> personalizations = new ArrayList<Personalization>();
personalizations.add(personalization);
emailParams.setContent(contents);
emailParams.setFrom(from);
emailParams.setPersonalizations(personalizations);
final String requestJson = objectMapper.writeValueAsString(emailParams);
final HttpEntity<String> requestHttpEntity = new HttpEntity<String>(requestJson,
getHttpHeaders(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON));
final String endPointUri = new StringBuffer(<SENDGRID_URL>).toString();
final ResponseEntity<String> messageResponse = restTemplate.exchange(endPointUri, HttpMethod.POST,
requestHttpEntity, String.class);
return "success";
private HttpHeaders getHttpHeaders(MediaType contentType, MediaType accept)
final HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setAccept(Collections.singletonList(accept));
httpHeaders.setContentType(contentType);
httpHeaders.setBearerAuth("<bearer token value>");
return httpHeaders;
```
【问题讨论】:
您可以使用base64 encoded
字符串作为图像源
我已经用过了。但 gmail 不支持 base64 字符串,它会剪辑整个电子邮件,在整个电子邮件正文中仅显示 base64 字符串
您可以尝试将其作为附件发送或修改此处的代码以满足您的需求:***.com/questions/38599079/…。
【参考方案1】:
这里是 Twilio SendGrid 开发人员宣传员。
您应该将图像作为附件发送,并使用 CID(内容 ID)在电子邮件内容中引用图像。
您可以使用如下代码创建附件:
Attachments attachments = new Attachments();
attachments.setContent("BwdW"); // Insert actual content here
attachments.setType("image/png");
attachments.setFilename("banner.png");
attachments.setDisposition("inline"); // This means it can appear inline
attachments.setContentId("banner"); // This sets the CID
emailParams.addAttachments(attachments);
然后您可以使用 <img>
标记中的 CID 引用图像,如下所示:
<img src="cid:banner" />
有关详细信息,请参阅embedding images in emails 和 this kitchen sink email example in Java 上的这篇文章。
【讨论】:
以上是关于对于从 java 程序发送的电子邮件,html 内容中的 png 图像未显示在 gmail 客户端上的主要内容,如果未能解决你的问题,请参考以下文章