java mail 发送邮件代码(绝对可跑)

mail.jar ,commons-email-X.X.jar ,activation.jar 这三个jar,放进项目里

在代码中可实现普通邮件发送,html邮件发送,群发


package mail;

import java.util.ArrayList;
import java.util.List;





public  class StartMail {
	public static void main(String[] args){   
		//这个类主要是设置邮件   
		MailSenderInfo mailInfo = new MailSenderInfo(); 
		/**
		 * QQ服务器
		 */
		mailInfo.setMailServerHost("smtp.qq.com");//QQ服务器
		mailInfo.setMailServerPort("25");    
		mailInfo.setValidate(true);    
		mailInfo.setUserName("*****@qq.com");  //你的邮箱  
		mailInfo.setPassword("rafolozdpinfbbjh");//您的邮箱密码    这个很有意思 他不是你的密码 下面会告诉你它是怎么来的
		mailInfo.setFromAddress("*****@qq.com");    
		//mailInfo.setToAddress("****@163.com"); 
		mailInfo.setToAddress("****@qq.com"); 
		
		/**
		 * 这个没测通后来才知道  如果你的邮箱刚刚注册 他就发不了
		 */
//			     mailInfo.setMailServerHost("smtp.163.com");
//			     mailInfo.setMailServerPort("25");    
//			     mailInfo.setValidate(true);    
//			     mailInfo.setUserName("*****@formssi.com");    
//			     mailInfo.setPassword("KtNY9ZA4fCyyxuTy");//您的邮箱密码 这个不是你登陆的密码 是授权码 下面会告诉你怎么来的   
//			     mailInfo.setFromAddress("***g@formssi.com");    
//			     //mailInfo.setToAddress("***@163.com"); 
//			     mailInfo.setToAddress("***@qq.com"); 





		//发送多人和抄送多人的效果
		List<String> tolist = new ArrayList<String>(); // 发件人集合  
		tolist.add("****@qq.com");  
		tolist.add("****@formssi.com");  
		List<String> cclist = new ArrayList<String>();// 抄送人集合  
		cclist.add("XXX@126.com");  
		cclist.add("XXX@126.com");  

		//end--------------------



		mailInfo.setSubject("主题2");  
		StringBuffer theMessage = new StringBuffer();
		//HTML 发送内容
		theMessage.append("<h2><font color=red>邮件发送成功!!</font></h2>");
		theMessage.append("<hr>");
		theMessage.append("<i>我是一个好人 好人卡发送使者</i><br>");
		theMessage.append("<i>您的验证码是:</i><i style='color:red'>124589</i><br><br><br>");
		theMessage.append("<img id='qqiconimg' src='http://market.cmbchina.com/ccard/edmhd/jxcxedm/images/edm1_01.jpg' style='width:200px;height:300px;position:absolute;margin:-14px 0 0 0;'"); 
		theMessage.append("<br><i cursor=pointer>www.baidu.com</i>");
		mailInfo.setContent(theMessage.toString());    

		//这个类主要来发送邮件   抽象类用对象领用 还是没有类.方法好用 
		SimpleMailSender sms = new SimpleMailSender();   
		// sms.sendTextMail(mailInfo);//发送文体格式    
		//sms.sendHtmlMail(mailInfo);//发送html格式   


		//发送多人的
		 SimpleMailSender.sendHtmlMailMorePeoPle(mailInfo,tolist);
	}  






}

话不多说直接上代码:

package mail;
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(){  
    	//QQ的用法
      Properties p = new Properties();    
      p.put("mail.smtp.host", this.mailServerHost);    
      p.put("mail.smtp.port", this.mailServerPort); 
      p.put("mail.smtp.starttls.enable","true");使用 STARTTLS安全连接   这个很重要不要忘记加了
      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 mail;



import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
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;
import javax.mail.internet.MimeUtility;

  
/**   
* 简单邮件(不带附件的邮件)发送器   
http://www.bt285.cn BT下载
*/    
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    
      System.err.println(pro.getProperty("mail.smtp.host")+"          xingming          "+authenticator.password);
      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);  
      System.out.println("message yes"); 
      
      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);  
      /**
       * 群发邮件
       */
      // 创建邮件的接收者地址,并设置到邮件消息中    
      //InternetAddress[] to = new InternetAddress[]{new InternetAddress(mailInfo.getToAddress()),new InternetAddress("*****@163.com")};    
      // Message.RecipientType.TO属性表示接收者的类型为TO    
     // mailMessage.setRecipients(Message.RecipientType.TO,to);    
      
      
      
      // 设置邮件消息的主题    
      mailMessage.setSubject(mailInfo.getSubject());    
      // 设置邮件消息发送的时间    
      mailMessage.setSentDate(new Date());  
      
      /**
       * MiniMultipart类是一个容器类
       */
      // 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);   
      /**
       * 添加附件
       */
      BodyPart mbpf = new MimeBodyPart();  
      
      FileDataSource fds = new FileDataSource("D:/yyy.txt");//附件  

      mbpf.setDataHandler(new DataHandler(fds));  

      try {
		mbpf.setFileName(MimeUtility.encodeWord(fds.getName(), "utf-8",null));
	} catch (UnsupportedEncodingException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  
      

      mainPart.addBodyPart(mbpf);  
      //附件end
   
      
      //保存发送的邮件
      mailMessage.saveChanges();  
      // 发送邮件    
      Transport.send(mailMessage);    
      
      System.out.println("message yes"); 
      return true;    
      } catch (MessagingException ex) {    
          ex.printStackTrace();    
      }    
      return false;    
    }   
    
    
    
    
    
    /**   
     * 以HTML格式发送多人邮件   
     * @param mailInfo 待发送的邮件信息   
     */    
   public  static boolean sendHtmlMailMorePeoPle(MailSenderInfo mailInfo,List<String> MailList){    
     // 判断是否需要身份认证    
     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); 
     /**
      * 群发邮件简单的写法
      */
     // 创建邮件的接收者地址,并设置到邮件消息中    
   // InternetAddress[] to = new InternetAddress[]{new InternetAddress(mailInfo.getToAddress()),new InternetAddress("sheduangao@163.com")};    
     // Message.RecipientType.TO属性表示接收者的类型为TO    
   //  mailMessage.setRecipients(Message.RecipientType.TO,to);    
     
     
     //发送多人
     if(MailList.size()>0){  
         
    	 InternetAddress[]  addressTO = new InternetAddress[MailList.size()]; //收件人  
           
         for (int i = 0; i < MailList.size(); i++) {  
             addressTO[i] = new InternetAddress(MailList.get(i));  
         }  
           
         mailMessage.setRecipients(Message.RecipientType.TO,addressTO);//设置收件人信息  
        
     } 
     
  
     // 设置邮件消息的主题    
     mailMessage.setSubject(mailInfo.getSubject());    
     // 设置邮件消息发送的时间    
     mailMessage.setSentDate(new Date());  
     
     /**
      * MiniMultipart类是一个容器类
      */
     // 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);   
   
     //保存发送的邮件
     mailMessage.saveChanges();  
     // 发送邮件    
     Transport.send(mailMessage);    
     
     System.out.println("message yes"); 
     return true;    
     } catch (MessagingException ex) {    
         ex.printStackTrace();    
     }    
     return false;    
   }

	
}   

验证用的

package mail;

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

}   

授权码怎么来的 以QQ 为例(其余的差不多)





效果图:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值