java mail邮件发送功能代码

来源:互联网 发布:什么叫函数式编程 编辑:程序博客网 时间:2024/05/29 16:22

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如果通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。


1. 电子邮件协议
电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所有本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。


2. JavaMail

我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去 Java 或 Oracle 官网下载。


关联jar文件下载(javax.mail.jar 和activation.jar)

http://download.csdn.net/detail/zhouzhiwengang/9752174

3、邮件功能代码封装

package com.settlement.commons.email;import java.util.Properties;/**   * 发送邮件需要使用的基本信息   */ public class MailSenderInfo {// 发送邮件的服务器的IP和端口      private String mailServerHost;      private String mailServerPort = "25";      // 邮件发送者的地址      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 boolean isValidate() {          return validate;      }        public void setValidate(boolean validate) {          this.validate = validate;      }        public String[] getAttachFileNames() {          return attachFileNames;      }        public void setAttachFileNames(String[] fileNames) {          this.attachFileNames = fileNames;      }        public String getFromAddress() {          return fromAddress;      }        public void setFromAddress(String fromAddress) {          this.fromAddress = fromAddress;      }        public String getPassword() {          return password;      }        public void setPassword(String password) {          this.password = password;      }        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 getSubject() {          return subject;      }        public void setSubject(String subject) {          this.subject = subject;      }        public String getContent() {          return content;      }        public void setContent(String textContent) {          this.content = textContent;      }  }


package com.settlement.commons.email;import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;//构建邮箱安全认证账户public class EmailAuthenticator extends Authenticator { String userName = null;   String password = null;    public EmailAuthenticator(){  }public EmailAuthenticator(String userName, String password) {super();this.userName = userName;this.password = password;}    //构建 PasswordAuthentication安全认证@Overrideprotected PasswordAuthentication getPasswordAuthentication() {// TODO Auto-generated method stubreturn new PasswordAuthentication(userName,password);}   }



package com.settlement.commons.email;import java.util.Date;  import java.util.Properties;  import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;  import javax.mail.BodyPart;  import javax.mail.Message;  import javax.mail.MessagingException;  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 SimpleMailSender { /**      * 以文本格式发送邮件      *       * @param mailInfo      *            待发送的邮件的信息      */      public boolean sendTextMail(MailSenderInfo mailInfo) {          // 判断是否需要身份认证          EmailAuthenticator authenticator = null;          Properties pro = mailInfo.getProperties();          if (mailInfo.isValidate()) {              // 如果需要身份认证,则创建一个密码验证器              authenticator = new EmailAuthenticator(mailInfo.getUserName(),                      mailInfo.getPassword());          }          // 根据邮件会话属性和密码验证器构造一个发送邮件的session          Session sendMailSession = Session                  .getDefaultInstance(pro, authenticator);          try {              // 根据session创建一个邮件消息              Message mailMessage = new MimeMessage(sendMailSession);              // 创建邮件发送者地址              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());              // 设置邮件消息的主要内容              String mailContent = mailInfo.getContent();              mailMessage.setText(mailContent);              // 发送邮件              Transport.send(mailMessage);              return true;          } catch (MessagingException ex) {              ex.printStackTrace();          }          return false;      }        /**      * 以HTML格式发送邮件      *       * @param mailInfo      *            待发送的邮件信息      */      public boolean sendHtmlMail(MailSenderInfo mailInfo) {          // 判断是否需要身份认证      EmailAuthenticator authenticator = null;          Properties pro = mailInfo.getProperties();          // 如果需要身份认证,则创建一个密码验证器          if (mailInfo.isValidate()) {              authenticator = new EmailAuthenticator(mailInfo.getUserName(),                      mailInfo.getPassword());          }          // 根据邮件会话属性和密码验证器构造一个发送邮件的session          Session sendMailSession = Session                  .getDefaultInstance(pro, authenticator);          try {              // 根据session创建一个邮件消息              Message mailMessage = new MimeMessage(sendMailSession);              // 创建邮件发送者地址              Address from = new InternetAddress(mailInfo.getFromAddress());              // 设置邮件消息的发送者              mailMessage.setFrom(from);              // 创建邮件的接收者地址,并设置到邮件消息中              Address to = new InternetAddress(mailInfo.getToAddress());              // Message.RecipientType.TO属性表示接收者的类型为TO              mailMessage.setRecipient(Message.RecipientType.TO, to);              // 设置邮件消息的主题              mailMessage.setSubject(mailInfo.getSubject());              // 设置邮件消息发送的时间              mailMessage.setSentDate(new Date());                            // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象              Multipart mainPart = new MimeMultipart();              // 创建一个包含HTML内容的MimeBodyPart              BodyPart html = new MimeBodyPart();              // 设置HTML内容              html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");              mainPart.addBodyPart(html);                            //设置信件的附件(用本地上的文件作为附件)              html = new MimeBodyPart();              FileDataSource fds = new FileDataSource("D:\\...javamail.doc");              DataHandler dh = new DataHandler(fds);              html.setFileName("javamail.doc");              html.setDataHandler(dh);              mainPart.addBodyPart(html);                            // 将MiniMultipart对象设置为邮件内容              mailMessage.setContent(mainPart);              mailMessage.saveChanges();                            // 发送邮件              Transport.send(mailMessage);              return true;          } catch (MessagingException ex) {              ex.printStackTrace();          }          return false;      }  }

package com.settlement.commons.email;public class SendMailUtil {// 163邮箱      public static void send_163() {          // 这个类主要是设置邮件          MailSenderInfo mailInfo = new MailSenderInfo();          mailInfo.setMailServerHost("smtp.exmail.qq.com");          mailInfo.setMailServerPort("25");          mailInfo.setValidate(true);          mailInfo.setUserName("system@wlsq.tv"); // 实际发送者          mailInfo.setPassword("******");// 您的邮箱密码          mailInfo.setFromAddress("system@wlsq.tv"); // 设置发送人邮箱地址          mailInfo.setToAddress("2355540290@qq.com"); // 设置接受者邮箱地址          mailInfo.setSubject("测试邮件发送功能代码");          mailInfo.setContent("呵呵呵,深圳未来社区技术有限公司<b>h6</b>");          // 这个类主要来发送邮件          SimpleMailSender sms = new SimpleMailSender();          sms.sendTextMail(mailInfo); // 发送文体格式         // sms.sendHtmlMail(mailInfo); // 发送html格式      }         public static void main(String[] args){    SendMailUtil.send_163();    }}




0 0
原创粉丝点击