Java实现邮件发送

1. 首先编写MailSenderInfo类,封装邮件发送用到的所有信息,包括邮件发送服务器的ip(mailServerHost)和端口mailServerPort = "25",发送者的地址和接收这的地址(fromAddress,toAddress),登录服务器的用户名和密码,是否需要身份验证,邮件主题,邮件的文本内容和邮件的附件文件名等

2. 编写自己的密码验证器,如果需要验证,通过密码验证器传递用户名宁和密码。

3. 发送邮件,首先进行身份验证,然后根据回话属性和密码验证器构造一个发送邮件的session,根据session创建一个邮件消息,将发送者邮箱地址和接受者邮箱地址以及邮件中的其他信息封装在邮件消息中,然后发送邮件。默认是一text文本的形式发送的,如果想以html的形式发送,需要创建一个Multipart容器类和一个BodyPart类,通过html.setContent()方法将文本内容放到html中,并设置编码格式,然后将html设置为邮件内容mainPart.addBodyPart(html),最后发送。

4. 编写测试类,在main方法中添加邮件内容,最后调用发送邮件的方法,发送成功。


直接复制下面代码即可


1.邮件信息类:

package cn.bistu.edu;

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;    
        }    
}


2.密码验证器


package cn.bistu.edu;

import javax.mail.*;

public class MyAuthenticator extends Authenticator{   
    String userName=null;   
    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);
    }   
}  


3.邮件发送功能

/**
 * @author wangxuhu
 * 2014-3-19
 */
package cn.bistu.edu;

import java.util.Date;
import java.util.Properties;

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) {    
          // 判断是否需要身份认证    
          MyAuthenticator authenticator = null;    
          Properties pro = mailInfo.getProperties();   
          if (mailInfo.isValidate()) {    
          // 如果需要身份认证,则创建一个密码验证器    
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());    
          }   
          // 根据邮件会话属性和密码验证器构造一个发送邮件的session    
          Session sendMailSession = Session.getDefaultInstance(pro,authenticator);
          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 static boolean sendHtmlMail(MailSenderInfo mailInfo){    
          // 判断是否需要身份认证    
          MyAuthenticator authenticator = null;   
          Properties pro = mailInfo.getProperties();   
          //如果需要身份认证,则创建一个密码验证器     
          if (mailInfo.isValidate()) {    
            authenticator = new MyAuthenticator(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);    
          // 将MiniMultipart对象设置为邮件内容    
          mailMessage.setContent(mainPart);    
          // 发送邮件    
          Transport.send(mailMessage);    
          return true;    
          } catch (MessagingException ex) {    
              ex.printStackTrace();    
          }    
          return false;    
        }    
}


4.测试类


package cn.bistu.edu;

public class TestEmailSend {
    public static void main(String[] args){
    Thread thread = new Thread();
        //这个类主要是设置邮件   
     MailSenderInfo mailInfo = new MailSenderInfo();    
     mailInfo.setMailServerHost("smtp.163.com");    
     mailInfo.setMailServerPort("25");    
     mailInfo.setValidate(true);
     mailInfo.setUserName("love_dota1101@163.com");    
     mailInfo.setPassword("QAZqaz");//您的邮箱密码    
     mailInfo.setFromAddress("love_dota1101@163.com");    
     mailInfo.setToAddress("love_dota1102@163.com");    
     mailInfo.setSubject("邮件主题!");
     mailInfo.setContent("这是我给你发的垃圾邮件,你要是敢删,我会每分钟都给你发的!");    
        //这个类主要来发送邮件   
     SimpleMailSender sms = new SimpleMailSender();
         sms.sendTextMail(mailInfo);//发送文体格式    
        System.out.println("发送成功");
        sms.sendHtmlMail(mailInfo);//发送html格式    
     }
       
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值