楔子
看到了一个Apache工具类,介绍发邮件 的
commons-email
,之前是使用spring的方式来发送邮件,想尝试一下 Apache这个工具类。
在内嵌图片这部分,尝试了多次,只能发送1张图片,后发现问题所在。
效果
这是 待发送的 本地 文件 和图片
这是发送的效果
demo
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collection;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.mail.DefaultAuthenticator;
import org.apache.commons.mail.Email;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.mail.SimpleEmail;
/**
* common mail内嵌图片
*
* @throws EmailException
*/
public static void sendMailOnlinePic() throws EmailException {
HtmlEmail email = new HtmlEmail();
email.setHostName("smtp.163.com");
email.setSmtpPort(465);
// 用户名和密码为邮箱的账号和密码(不需要进行base64编码)
email.setAuthenticator(new DefaultAuthenticator("********@163.com", "#######"));
email.setSSLOnConnect(true);
email.setFrom("********@163.com");
email.setSubject("TestMail online PIC");
email.setCharset(StandardCharsets.UTF_8.name());
email.addTo("********@163.com");
// 内嵌图片
StringBuilder sBuilder = new StringBuilder("<font color='blue'>This is a test mail ... :-)</font>");
Collection<File> listFiles = FileUtils.listFiles(new File("c:/pic"), null, true);
for (File file : listFiles) {
// TODO 位置1 和位置2 要设置为一致
// TODO 位置1
email.embed(file, file.getName());
// common-io 工具包判断文件 是否 是图片后缀
if (FilenameUtils.isExtension(file.getName(), Arrays.asList("jpg", "png", "gif"))) {
// TODO 位置2
sBuilder.append("<img src='cid:" + file.getName() + "' />");
}
// 如果没有 <img src='cid 则作为附件发送
}
email.setHtmlMsg(sBuilder.toString());
email.send();
}
pom
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>