最近用到邮件发送功能,就搜了一下文章,看了下,当然也可以直接看javamail的帮助文档。如果找到一篇好文章,上手还是挺快的,这有篇关于javamail的不错文章,推荐下:
http://blog.csdn.net/chjttony/article/details/6005235。好东西就要分享,呵呵...
发送纯文本或html格式的邮件
public boolean sendEmail(String propsFile, String to, String title,String content,boolean isHtml) { //创建邮件配置属性 Properties props = new Properties(); boolean result = false; try { //邮件服务器地址 String host = PropertiesUtil.getProperties("mail.smtp.host", propsFile); //发件人邮箱登陆账号 String username = PropertiesUtil.getProperties("username", propsFile); //发件人邮箱登陆密码(加密后的,需要解密) String password = PropertiesUtil.getProperties("password", propsFile); //发件人邮箱 String from = PropertiesUtil.getProperties("from", propsFile); /*1.设置连接会话属性*/ //邮件发送服务器地址 props.put("mail.smtp.host",host ); //连接邮件服务器时是否验证 props.put("mail.smtp.auth", "true"); //创建邮件会话 Session session = Session.getInstance(props); //设置调试模式,可以打印邮件发送过程信息 session.setDebug(true); /*2.创建邮件对象*/ //由会话对象创建消息对象 Message message = new MimeMessage(session); /*3.设置邮件相关信息*/ //发件人地址 InternetAddress fromAddress = new InternetAddress(from); //设置发件人地址 message.setFrom(fromAddress); //设置收件人 InternetAddress toAddress = new InternetAddress(to); //设置收件人接收类型为TO message.setRecipient(Message.RecipientType.TO, toAddress); //设置邮件主题 message.setSubject(title); //设置邮件内容 if(isHtml){ //html格式 message.setContent(content,"text/html;charset=gb2312"); }else{ //纯文本 message.setText(content); } //设置邮件发送时间 message.setSentDate(new Date()); /*4.发送邮件*/ //存储邮件信息 message.saveChanges(); //创建邮件发送对象,并指定发送协议为SMTP Transport transport = session.getTransport("smtp"); //登陆邮箱服务器 transport.connect(host, username, CyptUtil.decrypt(password)); //发送邮件 transport.sendMessage(message, message.getAllRecipients()); //关闭连接 transport.close(); result = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } return result; }其中PropertiesUtil和CyptUtil是两个工具类,前者是用来从property配置文件读取邮件服务器配置参数,代码中可以直接替换为自己的配置选项。CyptUtil是用来加密和解密的,密码当然需要加密,此处可以直接去掉CyptUtil.decrypt()方法,使用明文密码.
发送带附件的邮件:
public boolean sendEmailWithMultipart(String propsFile, String to, String title, String content, String filename) { boolean result = false; Properties props = new Properties(); try { String host = PropertiesUtil.getProperties("mail.smtp.host", propsFile); String username = PropertiesUtil.getProperties("username", propsFile); String password = PropertiesUtil.getProperties("password", propsFile); String from = PropertiesUtil.getProperties("from", propsFile); //1.设置属性 props.put("mail.smtp.host", host); props.put("mail.smtp.auth", true); //2.创建会话 Session session = Session.getInstance(props); session.setDebug(true); //3.创建消息体(HTML格式发送邮件内容) Message message = new MimeMessage(session); message.setFrom(new InternetAddress(from)); message.setRecipient(RecipientType.TO, new InternetAddress(to)); message.setSubject(title); //4.创建附件内容对象(mime类型邮件) //bodyPart对象是用来存放信件内容的 BodyPart textBodyPart = new MimeBodyPart(); //存放文本内容 textBodyPart.setContent(content, "text/html;charset=gb2312"); BodyPart messageBodyPart = new MimeBodyPart(); //存放附件内容 //5.设置附件内容对象的数据源和dataHandler //建立附件数据源,如果是通过url传输,则需要使用UrlDataSource(url) DataSource source = new FileDataSource(filename); //设置附件的DataHandler messageBodyPart.setDataHandler(new DataHandler(source)); //设置附件的名称 messageBodyPart.setFileName(filename); //6.创建附件对象 //新建一个附件对象用来存放一个或多个BodyPart对象 Multipart multipart = new MimeMultipart(); //将附件内容对象加入到附件对象中 multipart.addBodyPart(textBodyPart); multipart.addBodyPart(messageBodyPart); //7.添加附件对象到消息体 message.setContent(multipart); message.setSentDate(new Date()); message.saveChanges(); //8.发送邮件 Transport transport = session.getTransport("smtp"); transport.connect(host, username, CyptUtil.decrypt(password)); transport.sendMessage(message, message.getAllRecipients()); transport.close(); result = true; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } return result; }