zoukankan      html  css  js  c++  java
  • JavaMail应用--通过javamail API实现在代码中发送邮件功能

    JavaMail应用
     
    在日常开发中,可能会引用到发邮件功能,例如在持续集成中,自动化测试运行完毕,自动将测试结果以报表的形式发送邮件给相关人。那么在Java中如何实现发邮件呢?
    在java EE   中有个JavaMail插件 是专门解决java收发邮件功能的,下载地址:http://www.oracle.com/technetwork/java/index-138643.html
    下载后我们解压压缩包,提取里面的mail.jar,引入到工程中,便可以使用JavaMail API 进行发送邮件了。
     
    下面是我根据JavaMail封装的用于发送邮件的方法,使用简单方便,只要填写SMTP 服务器地址,端口,用户名,密码,发送内容,发送人地址,收件人地址即可发送邮件
    package net.hk515.utils;
    import java.util.Properties;
    
    import javax.mail.Address;
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    import javax.mail.Session;
    import javax.mail.Store;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    
    import java.util.ArrayList;
    
    import com.sun.mail.smtp.*;
    
    public class SendMail {
    	private Log log=new Log(SendMail.class);
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		SendMail sendMail=new SendMail();
    		sendMail.sendmessage("zhengshuheng@XXX.com", "XXX", "smtp.mxhichina.com", "25", "zhengshuheng@XXX.com", "XXX@XX.com,XXX@XX.com", "测试邮件发送函数", "测试邮件发送函数");
    
    	}
          /**
           * 
           * @param userName  发送邮箱账号  xxx@xxx.com形式
           * @param passWord  发送邮件密码
           * @param smtpHost  stmp服务器地址
           * @param smtpPort  smtp服务器端口
           * @param from      发件人地址
           * @param tos       收件人地址
           * @param title     标题
           * @param content   内容
           */
    	 public void sendmessage(String userName,String passWord,String smtpHost,String smtpPort,String from,String tos ,String title,String content)
    	 {
    		 Properties smtpProper=setSmtp(smtpHost, smtpPort, userName, passWord);
    		 Auth authenticator=new Auth(userName, passWord);
    		 try {
    			   
    			    //创建session实例
    		        Session session=Session.getInstance(smtpProper, authenticator);
    				 MimeMessage message=new MimeMessage(session);
    				 session.setDebug(true);
    				 
    				 //设置from发件人邮箱地址
    				 message.setFrom(new InternetAddress(from));
    				 //收件人to LIST
    				  ArrayList<Address> toList=new ArrayList<Address>();
    				  //收件人字符串通过,号分隔收件人
    				  String[] toArray=tos.split(",");
    				  for (int i = 0; i < toArray.length; i++)
    				   {
    					String str = toArray[i];
    					toList.add(new InternetAddress(str));
    				   }
    				  //将收件人列表转换为收件人数组
    				  Address[] addresses=new Address[toList.size()];
    				  addresses=toList.toArray(addresses);
    				 //设置to收件人地址
    				 message.setRecipients(MimeMessage.RecipientType.TO,addresses);
    				 //设置邮件标题
    				 message.setSubject(title);
    				 //设置邮件内容
    				 message.setContent(content, "text/html;charset=UTF-8");
    				 //Transport.send(message);
    				 Transport transport=session.getTransport();
    				 transport.connect(smtpHost,userName, passWord);
    				 transport.sendMessage(message,addresses);
    				 log.info("发送邮件成功!");
    				 
    		} catch (Exception e) {
    			// TODO: handle exception
    			log.error("发送邮件失败!");
    			e.printStackTrace();
    		}
    		
    		 
    	 }
    	 
    	private Properties setSmtp(String smtpHost,String smtpPort,String userName,String passWord)
    	{
    		//创建邮件配置文件
    	    Properties maiProperties=new Properties();
            //配置smtp发件服务器
            maiProperties.put("mail.transport.protocol", "smtp");
             //配置smtp服务器
            maiProperties.put("mail.smtp.host", smtpHost);
            //配置smtp服务器端口
            maiProperties.put("mail.smtp.port", smtpPort);
            //配置smtp用户名
            maiProperties.put("mail.user", userName);
            //配置smtp身份验证
            maiProperties.put("mail.smtp.auth", "true");
            return maiProperties;
           
             
    	}
    	
    }
    //smtp 身份验证类
    class Auth extends Authenticator  
    {
    	Properties pwdProperties;
    	//构造函数
    	
    	public Auth(String userName,String passWord)
    	 {
    		pwdProperties=new Properties();
    		try {
    			pwdProperties.put(userName,passWord);
    		} catch (Exception e) {
    			// TODO: handle exception
    			e.printStackTrace();
    		}
    	 }
    	//必须实现 PasswordAuthentication 方法
    	 public PasswordAuthentication passwordAuthentication()
    	  {
    		String userName=getDefaultUserName();
    		//当前用户在密码表里
    		if (pwdProperties.containsKey(userName)) {
    			//取出密码,封装好后返回
    			return new PasswordAuthentication(userName, pwdProperties.getProperty(userName).toString());
    			
    		}
    		else {
    			//如果当前用户不在密码表里就返回Null
    			System.out.println("当前用户不存在");
    			return null;
    			
    			
    		 }
    		
    	 }
    	
    	
     }
     
     
    

      

  • 相关阅读:
    [算法说明]SAP HANA PAL 指数平滑算法说明 沧海
    [Step By Step]SAP HANA PAL演绎推理算法Lite Aprior实现LITEAPRIORIRULE 沧海
    [PAL规范]SAP HANA PAL K分值硬聚类算法KMeans编程规范KMEANS 沧海
    [Step By Step]SAP HANA PAL K分值硬聚类算法KMeans Validated实现案例VALIDATEKMEANS 沧海
    SAP HANA AFL插件库升级后之前生成的存储过程升级方法(PAL升级方法) 沧海
    [PAL规范]SAP HANA PAL单指数平滑编程规范 沧海
    [PAL规范]SAP HANA PAL演绎推理算法Lite Apriori编程规范LITEAPRIORIRULE 沧海
    [Step By Step]SAP HANA PAL K分值硬聚类算法KMeans实现KMEANS 沧海
    [Step By Step]SAP HANA PAL Time Series单指数平滑算法SINGLESMOOTH(Single Exponential Smoothing) 沧海
    [PAL规范]SAP HANA PAL K分值硬聚类算法KMeans Validated编程规范VALIDATEKMEANS 沧海
  • 原文地址:https://www.cnblogs.com/zhengshuheng/p/5580500.html
Copyright © 2011-2022 走看看