java发动邮件其实很简单,这是使用Javamail来实现,使用maven管理
1.导包:这两个包缺一不可
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.5.6</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.6</version>
</dependency>
2.如果不想用现成的邮箱,比如163,139等,可以自己搭建smtp邮件服务器。但是这里使用163邮箱来实现,但163邮箱要开启smtp(登陆邮箱设置就可以)
3.源代码:需要的参数是:发送地址,开启smtp的时候设置的密码,smtp端口,目的地址,邮件的主题,邮件内容,附件的地址
public static void sendMsg(String fromAddress,String fromAddresspwd,String host,
String toAddress,String subject,String content,String filepath) throws Exception{
// 用于连接邮件服务器的参数配置
Properties props = new Properties();
//发送邮件的服务器地址
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
props.put("mail.transport.protocol","smtp");
props.put("mail.debug", "true");
//创建Session对象
Session session =Session.getInstance(props);
//创建出MimeMessage,邮件的消息对象
MimeMessage message = new MimeMessage(session);
//设置发件人
Address fromAddr = new InternetAddress(fromAddress,"每日执法信息导出小助手");
message.setFrom(fromAddr);
//设置收件人
Address toAddr=new InternetAddress(toAddress,"无敌小神童");
message.setRecipient(RecipientType.TO, toAddr);
//设置邮件的主题
message.setSubject(subject,"UTF-8");
//设置文本节点
MimeBodyPart text=new MimeBodyPart();
text.setContent(content,"text/html;charset=UTF-8");
//创建附件节点
MimeBodyPart attachment=new MimeBodyPart();
DataHandler dataHandler=new DataHandler(new FileDataSource(filepath));// 读取本地文件
attachment.setDataHandler(dataHandler);// 将附件数据添加到“节点”
attachment.setFileName(MimeUtility.encodeText(dataHandler.getName()));// 设置附件的文件名(需要编码)
//设置文本和图片的关系
MimeMultipart mimeMultipart=new MimeMultipart();
mimeMultipart.addBodyPart(text);
mimeMultipart.addBodyPart(attachment);
mimeMultipart.setSubType("mixed");
//设置邮件的正文
message.setContent(mimeMultipart);
//用于连接邮件服务器的参数配置
message.setSentDate(new Date());
message.saveChanges();//保存更新
//根据 Session 获取邮件传输对象
Transport transport = session.getTransport("smtp");
transport.connect(host,fromAddress,fromAddresspwd); //设置了邮件的发射地址
//发送邮件到收件地址
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
4.在程序入口调用即可。本代码可以用作工具方法