我正在尝试发送带有图片附件的Mime电子邮件,但确实知道该怎么做。我尝试了在线解决方案,但是没有用。我将获得编码的图像,并且需要解码并附加到邮件中。这是我的代码
public class SendEmail{
public static void main( String[] args ) throws javax.mail.MessagingException, IOException
{
String value= "Wyk+HjAxHTAyNzg3MDUdODQwHTAxOR0wMDAwMDAwMDAwMDAwMDAd" +
"RkRFQh0wMDAwMDAwHTA0MB0dMS8xHTUwLjVMQh1OHVcgMzR0aCBTdHJlZXQdQ" +
"XVzdGluHVRYHSAeMDYdMTBaR0QwMDQdMTFaUmVjaXBpZW50IENvbXBhbnkgTmFt" +
"ZR0xMlo5MDEyNjM3OTA2HTE0WioqVEVTVCBMQUJFTCAtIERPIE5PVCBTSElQKio" +
"dMjNaTh0yMlocWR0yMFogHDAdMjZaNjEzMxwdHgQ=";
JavaMailSender mailSender = getJavaMailSender();
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper helper;
Map<String,Object> map = new HashMap<>();
try{
helper = new MimeMessageHelper(mimeMessage, true, "utf-8");
String sendTo = "abc@gmail.com";
String htmlMsg = "<h1> hello </h1>";
mimeMessage.setContent(htmlMsg, "text/html");
// add attachment encode in base64
byte[] decodedImg Base64.decodeBase64(value);
// dont know how to attache the decode img
helper.setTo(sendTo);
helper.setSubject("Subject");
mailSender.send(mimeMessage);
} catch (MessagingException e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
尝试:
helper.addAttachment("MyImageName.jpg", new ByteArrayResource(value.getBytes()));
但是请阅读: 从代码来看,您似乎已经对图像进行了编码。 “值”似乎是Base64格式。 您不应该为自己做这些。
// you can attach a file directly to the helper
FileSystemResource file = new FileSystemResource(new File("image_file.jpg"));
helper.addAttachment("MyImageName.jpg", file);
如果附件不是磁盘上的文件,则可以使用此文件:
helper.addAttachment("MyImageName.jpg", new ByteArrayResource(IOUtils.toByteArray(attachment)));
如果这是一个输入流或这个:
helper.addAttachment("MyImageName.jpg", new ByteArrayResource(value.getBytes()));
答案 1 :(得分:1)
用波纹管代码修改代码后,我的问题解决了。
value= value.replaceFirst("^data:image/[^;]*;base64,?", "");
byte[] bytes = javax.xml.bind.DatatypeConverter.parseBase64Binary(value);
helper.addAttachment("MyImageName.jpg", new ByteArrayResource(bytes));
答案 2 :(得分:0)
添加为附件已得到答复。或者,嵌入图像的方式如下:
htmlMsg += "<img width=\"400\" height=\"400\" "
+ "alt=\"View of the object.\" src=\"data:image/jpeg;base64,"
+ value + "\">";
值是Base64数据,必须调整哑剧类型image/jpeg
的宽度和高度。
某些邮件收件人可能会禁止使用纯文本格式的富文本邮件,但是只要<img>
不指向www(确认您已打开电子邮件),就可以使用富文本版本。
答案 3 :(得分:0)
下面是使用java邮件api发送base64编码的字符串(图像)作为附件的代码。
@Autowired
private JavaMailSender emailSender;
public void sendMessageWithAttachment(String from,String replyTo, String to, String cc, String subject, String emailContent, String base64EncodedString) {
MimeMessage message = emailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setReplyTo(replyTo);
helper.setTo(to);
helper.setCc(cc);
helper.setSubject(subject);
helper.setText(emailContent, true);
// Use MimeDecoder for decoding in order to avoid illegal argument exception
byte[] imgBytes = Base64.getMimeDecoder().decode(base64EncodedString);
ByteArrayDataSource dSource = new ByteArrayDataSource(imgBytes, "image/*");
helper.addAttachment("AttachedFile.jpg", dSource);
emailSender.send(message);
}