最近的项目要使用javamail进行邮件发送,写这篇博客总结下
发送简单的邮件
在进行邮件发送之前要引入javamail的Maven依赖
dependency>
<groupId>javamail</groupId>
<artifactId>mail</artifactId>
<version>1.3.2</version>
</dependency>
编写测试代码
//设置网易云邮箱账号
public static String emailAccout = "发送方的邮箱账号@163.com";
//设置网易云smtp授权码
public static String emailPassword = "发送方的授权码";
//设置163邮箱的smtp服务器地址
//邮件协议有smtp pop3 imap4 一般的发送邮件使用smtp协议,要先等于网易邮箱打开smtp、pop3/imap4协议授权
public static String emailSmptHost = "smtp.163.com";
//发送简单的邮件 content为邮件内容 To接收方
public static void setMail(String content,String To){
//设置邮件属性
Properties pro = new Properties();
//配置邮件传输协议
pro.setProperty("mail.transport.protocol", "smtp");
//设置发件人的smtpd地址
pro.setProperty("mail.smtp.host", emailSmptHost);
//设置需要进行认证
pro.setProperty("mail.smtp.auth", "true");
//创建会话对象,用户和邮件服务器交互
Session session = Session.getInstance(pro);
//设置为Debug模式 可以看到执行情况
sesssion.setDebug(true);
Transport transport = null;
try {
//创建一封邮件
MimeMessage message = new MimeMessage(session);
//设置发件人
message.setFrom(new InternetAddress(emailAccout));
//设置收件人 可以通过addRecipient添加多个收件人
message.setRecipient(RecipientType.TO, new InternetAddress(To));
//设置内容
message.setContent(content,"text/html;charset=utf-8");
//设置主题
message.setSubject("测试邮件");
//获取邮件传输对象
transport = session.getTransport();
//设置账号密码进行链接
transport.connect(emailSmptHost,emailAccout,emailPassword);
//发送邮件,发送到全部地址
transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
测试发送
setMail("测试","你要发送的邮箱@163.com");
结果
发送复杂的邮件 带图片与附件
public static void complexMail(String contend,String to) throws AddressException, MessagingException, UnsupportedEncodingException{
Properties pro = new Properties();
pro.setProperty("mail.transport.protocol", "smtp");
pro.setProperty("mail.smtp.host",emailSmptHost);
pro.setProperty("mail.smtp.auth", "true");
Session session = Session.getInstance(pro);
/* session.setDebug(true);
*/ MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailAccout));
message.setRecipient(RecipientType.TO, new InternetAddress(to));
message.setSubject("测试");
//创建图片"节点"
MimeBodyPart image = new MimeBodyPart();
//读取本地文件
DataHandler dh = new DataHandler(new FileDataSource("D://44//1.jpg"));
//将图片数据添加到节点
image.setDataHandler(dh);
//为图片节点设置唯一编号
image.setContentID("image_tail");
//创建文本"节点"
MimeBodyPart text = new MimeBodyPart();
//将整合图片包含到邮件内容中
text.setContent("这是一张图片<br/><img src='cid:image_tail'/>", "text/html;charset=UTF-8");
//设置文本和图片的节点关系,变成混合节点
MimeMultipart text_image = new MimeMultipart();
text_image.addBodyPart(text);
text_image.addBodyPart(image);
text_image.setSubType("related");
//将文件+图片封装成普通的节点
MimeBodyPart tIm = new MimeBodyPart();
tIm.setContent(text_image);
//创建附件
MimeBodyPart attachment = new MimeBodyPart();
//读取本地文件
DataHandler dh2 = new DataHandler(new FileDataSource("D://44//shop.sql"));
attachment.setDataHandler(dh2);
//设置附件名字
attachment.setFileName(MimeUtility.encodeText(dh2.getName()));
//设置文本加图片加附件 最大的节点
MimeMultipart mm = new MimeMultipart();
mm.addBodyPart(tIm);
mm.addBodyPart(attachment);
mm.setSubType("mixed");
//将节点添加到正文
message.setContent(mm);
Transport transport = session.getTransport();
transport.connect(emailSmptHost, emailAccout, emailPassword);
transport.sendMessage(message, message.getAllRecipients());
}
结果
注意
图片大小可调,在img可以设置宽度与高度
总结
javamail发送邮件先创建properties对象设置邮件属性,通过session构建与邮件服务器进行交互,再创建一封邮件对象MineMail,设置邮件内容与发件人,通过session构建邮件传输对象transport 进行连接邮件服务器与发送邮件