javamail发送文本邮件、HTML邮件及带附件邮件

来源:互联网 发布:sas软件个人购买价格 编辑:程序博客网 时间:2024/04/29 06:33
MailInfo.java
import java.util.Properties;public class MailInfo {private String mailServerHost;// 服务器ipprivate String mailServerPort;// 端口private String fromAddress;// 发送者的邮件地址private String toAddress;// 邮件接收者地址private String username;// 登录邮件发送服务器的用户名private String password;// 登录邮件发送服务器的密码private boolean validate = false;// 是否需要身份验证private String subject;// 邮件主题private String content;// 邮件内容private String[] attachFileNames;// 附件名称public Properties getProperties() {Properties p = new Properties();p.put("mail.smtp.host", this.mailServerHost);p.put("mail.smtp.port", this.mailServerPort);p.put("mail.smtp.auth", validate ? "true" : "false");return p;}public String getMailServerHost() {return mailServerHost;}public void setMailServerHost(String mailServerHost) {this.mailServerHost = mailServerHost;}public String getMailServerPort() {return mailServerPort;}public void setMailServerPort(String mailServerPort) {this.mailServerPort = mailServerPort;}public String getFromAddress() {return fromAddress;}public void setFromAddress(String fromAddress) {this.fromAddress = fromAddress;}public String getToAddress() {return toAddress;}public void setToAddress(String toAddress) {this.toAddress = toAddress;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public boolean isValidate() {return validate;}public void setValidate(boolean validate) {this.validate = validate;}public String getSubject() {return subject;}public void setSubject(String subject) {this.subject = subject;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public String[] getAttachFileNames() {return attachFileNames;}public void setAttachFileNames(String[] attachFileNames) {this.attachFileNames = attachFileNames;}}

MyAuthenticator.java

import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;public class MyAuthenticator extends Authenticator {private String username = null;private String password = null;public MyAuthenticator() {};public MyAuthenticator(String username, String password) {this.username = username;this.password = password;}protected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(username, password);}}

SimpleMail.java
import java.io.File;import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.Message;import javax.mail.Multipart;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeBodyPart;import javax.mail.internet.MimeMessage;import javax.mail.internet.MimeMultipart;public class SimpleMail {// 以文本格式发送邮件public static boolean sendTextMail(MailInfo mailInfo) {//判断是否需要身份认证MyAuthenticator authenticator = null;Properties properties = mailInfo.getProperties();if (mailInfo.isValidate()) {//如果需要身份认证,则创建一个密码验证器authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());}//根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(properties, authenticator);try {Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息 Address from = new InternetAddress(mailInfo.getFromAddress());//创建邮件发送者地址mailMessage.setFrom(from);//设置邮件消息的发送者Address to = new InternetAddress(mailInfo.getToAddress());//创建邮件的接收者地址mailMessage.setRecipient(Message.RecipientType.TO, to);//设置邮件消息的接收者mailMessage.setSubject(mailInfo.getSubject());//设置邮件消息的主题mailMessage.setSentDate(new Date());//设置邮件消息发送的时间//mailMessage.setText(mailInfo.getContent());//设置邮件消息的主要内容//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含附件内容的MimeBodyPart//设置HTML内容messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");mainPart.addBodyPart(messageBodyPart);//存在附件String[] filePaths = mailInfo.getAttachFileNames();if (filePaths != null && filePaths.length > 0) {for(String filePath:filePaths){messageBodyPart = new MimeBodyPart();File file = new File(filePath); if(file.exists()){//附件存在磁盘中FileDataSource fds = new FileDataSource(file);//得到数据源messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPartmessageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPartmainPart.addBodyPart(messageBodyPart);}}}//将MimeMultipart对象设置为邮件内容   mailMessage.setContent(mainPart);Transport.send(mailMessage);//发送邮件return true;} catch (Exception e) {e.printStackTrace();  }return false;}// 以HTML格式发送邮件 public static boolean sendHtmlMail(MailInfo mailInfo) {//判断是否需要身份认证MyAuthenticator authenticator = null;Properties properties = mailInfo.getProperties();if (mailInfo.isValidate()) {// 如果需要身份认证,则创建一个密码验证器authenticator = new MyAuthenticator(mailInfo.getUsername(), mailInfo.getPassword());}// 根据邮件会话属性和密码验证器构造一个发送邮件的sessionSession sendMailSession = Session.getDefaultInstance(properties, authenticator);try{Message mailMessage = new MimeMessage(sendMailSession);//根据session创建一个邮件消息 Address from = new InternetAddress(mailInfo.getFromAddress());//创建邮件发送者地址mailMessage.setFrom(from);//设置邮件消息的发送者Address to = new InternetAddress(mailInfo.getToAddress());//创建邮件的接收者地址mailMessage.setRecipient(Message.RecipientType.TO, to);//设置邮件消息的接收者mailMessage.setSubject(mailInfo.getSubject());//设置邮件消息的主题mailMessage.setSentDate(new Date());//设置邮件消息发送的时间//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象Multipart mainPart = new MimeMultipart();MimeBodyPart messageBodyPart = new MimeBodyPart();//创建一个包含HTML内容的MimeBodyPart//设置HTML内容messageBodyPart.setContent(mailInfo.getContent(),"text/html; charset=utf-8");mainPart.addBodyPart(messageBodyPart);//存在附件String[] filePaths = mailInfo.getAttachFileNames();if (filePaths != null && filePaths.length > 0) {for(String filePath:filePaths){messageBodyPart = new MimeBodyPart();File file = new File(filePath); if(file.exists()){//附件存在磁盘中FileDataSource fds = new FileDataSource(file);//得到数据源messageBodyPart.setDataHandler(new DataHandler(fds));//得到附件本身并至入BodyPartmessageBodyPart.setFileName(file.getName());//得到文件名同样至入BodyPartmainPart.addBodyPart(messageBodyPart);}}}//将MimeMultipart对象设置为邮件内容   mailMessage.setContent(mainPart);Transport.send(mailMessage);//发送邮件return true;}catch (Exception e) {e.printStackTrace();}return false;}}

emailTest.java
public class emailTest {public static void main(String[] args) {MailInfo mailInfo = new MailInfo();mailInfo.setMailServerHost("smtp.163.com");mailInfo.setMailServerPort("25");mailInfo.setValidate(true);mailInfo.setUsername("xxx@163.com");mailInfo.setPassword("xxxxx");// 您的邮箱密码mailInfo.setFromAddress("xxxx@163.com");mailInfo.setToAddress("xxxx@163.com");mailInfo.setSubject("设置邮箱标题");//附件String[] attachFileNames={"d:/Sunset.jpg"};mailInfo.setAttachFileNames(attachFileNames);// 这个类主要来发送邮件//mailInfo.setContent("设置邮箱内容");//SimpleMail.sendTextMail(mailInfo);// 发送文体格式StringBuffer demo = new StringBuffer();demo.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">").append("<html>").append("<head>").append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">").append("<title>测试邮件</title>").append("<style type=\"text/css\">").append(".test{font-family:\"Microsoft Yahei\";font-size: 18px;color: red;}").append("</style>").append("</head>").append("<body>").append("<span class=\"test\">大家好,这里是测试Demo</span>").append("</body>").append("</html>");mailInfo.setContent(demo.toString());SimpleMail.sendHtmlMail(mailInfo);// 发送html格式}}



原创粉丝点击