packagecom.test.email;importjavax.activation.DataHandler;importjavax.activation.FileDataSource;importjavax.mail.Message;importjavax.mail.Session;importjavax.mail.Transport;import javax.mail.internet.*;importjava.io.File;importjava.util.Properties;/***@authorlh
* @date 2020/7/16
* @description*/
public classSendEmail {//服务器地址
private static final String host = "smtp.163.com";//传输协议
private static final String protocol = "smtp";//发送人
private static final String from_username = "******@163.com";//密码(配置邮箱的授权码)
private static final String from_password = "******";//收件人
private static final String recipient = "******@qq.com";//附件
private static final String attach = "test\\report.html";//html格式
private static final String htmlString = "邮件测试链接";//发送邮件
public static voidsendEmail() {try{
Session session=SendEmail.createSession();
Message message=SendEmail.createMessage(session);
MimeMultipart multipart= newMimeMultipart();//HTML格式
multipart.addBodyPart(SendEmail.createHtmlContent());//发送附件
multipart.addBodyPart(SendEmail.createAttach());//设置文件
message.setContent(multipart);//消息传输
Transport transport =session.getTransport();//设置连接地址
transport.connect(host, from_username, from_password);//发送消息 message.getAllRecipients()获取邮件的所有收件人地址
transport.sendMessage(message, message.getAllRecipients());//关闭连接
transport.close();
System.out.println("邮件发送成功!");
}catch(Exception e) {
System.out.println("邮件发送失败!");
}
}//创建邮件会话
public staticSession createSession(){//构建properties文件
Properties properties = newProperties();//邮件协议
properties.setProperty("mail.transport.protocol",protocol);//服务器地址
properties.setProperty("mail.smtp.host",host);//身份认证
properties.put("mail.smtp.auth", "true");//设置是否使用ssl安全连接 ---一般都使用
properties.put("mail.smtp.ssl.enable", "true");//创建邮件会话
Session session =Session.getInstance(properties);returnsession;
}//构建邮件消息
public static Message createMessage(Session session) throwsException{
MimeMessage message= newMimeMessage(session);//设置主题
message.setSubject("这是一个测试报告");//设置文本消息
message.setText("这是测试文件,请勿回复!");//设置发送地址
message.setFrom(newInternetAddress(from_username));/***设置收件人地址
* Message.RecipientType.BCC :The "Bcc" (blind carbon copy) recipients.(“密件抄送”接收者)
* Message.RecipientType.CC :The "Cc" (carbon copy) recipients.“抄送”接收者
* Message.RecipientType.TO :The "To" (primary) recipients.“收件人”(主要)收件人。*/message.setRecipients(Message.RecipientType.TO,recipient);returnmessage;
}//发送邮件正文内容为HTML格式
public static MimeBodyPart createHtmlContent() throwsException{
MimeBodyPart bodyPart= newMimeBodyPart();
bodyPart.setContent(htmlString,"text/html;charset=UTF-8");returnbodyPart;
}//发送单个附件内容
public static MimeBodyPart createAttach() throwsException{
MimeBodyPart bodyPart= newMimeBodyPart();/*** 实现一个封装文件的简单 DataSource 对象。它通过 FileTypeMap 对象提供数据分类服务
* FileTypeMap是一个抽象类,为文件提供数据键入接口*/FileDataSource dataSource= new FileDataSource(newFile(attach));/*** 数据处理程序
* 创建引用指定 DataSource 的 DataHandler 实例。数据以字节流的形式存在。
* DataSource 将提供一个 InputStream 来访问数据*/DataHandler dataHandler= newDataHandler(dataSource);//添加邮件主体中
bodyPart.setDataHandler(dataHandler);//设置附件名称,MimeUtility.encodeText可以处理乱码问题
bodyPart.setFileName(MimeUtility.encodeText(dataSource.getName()));returnbodyPart;
}//测试
public static voidmain(String[] args){
SendEmail.sendEmail();
}
}