• JavaMail发送邮件


    使用javax.mail可以发送普通文本文件,HTML格式的文件,同样可以发送图文并茂(包含附件)的java邮件。

    发送邮件需要在验证发送的邮箱和密码:验证的帐号(本人使用163邮件)需要打开POP3/SMTP/IMAP

    设置邮箱授权登录密码(已设置好):

    新建java项目添加javax.mail.jar文件,并添加如下类文件:

    发送邮件格式需要基本信息类:EmailMessage

    package com.util.mail;
    
    import java.util.Date;
    
    /**
     * 发送邮件需要基本信息类
     */
    public class EmailMessage {
    	//	邮件接收者
    	public  static String TO = "15026933568@163.com";   
    
    	//	邮件发送人
    	public  static String FROM = "15026933568@163.com"; 
    	
    	// 发送人姓名
    	public  static String FROM_NAME = "15026933568"; 
    
    	//	 抄送者	
    	public  static String CC="1298243794@qq.com";   	
    
    	//	 暗送者
    	public  static String BCC="15026933568@163.com";   	
    
    	//	邮件类型
    	public 	static String Email_Content = "text/plain";
    
    	//	邮件主题
    	public  static String Email_Subject = "Test Email With JavaMail";   
    
    	//	邮件头
    	public  static String Email_Header = "This Is Email Header";   	
    
    	//	邮件内容
    	public  static String Email_Body = "<a href="http://www.baidu.com">This Is Email Body</a>"; 
    
    	//	使用邮箱	如果使用QQ修改为smtp.qq.com
    	public  static String Email_Host = "smtp.163.com";   		
    
    	//	邮件发送日期
    	public 	static Date sendDate = new Date(); 	
    
    	//	是否验证
    	public 	static boolean validate = true; 	
    }
    

      发送者邮件信息验证类:MailAuthenticator

    package com.util.mail;
    
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication;
    
    /**
     * 用户名和密码的验证
     * @author xiazhongwei
     *
     */
    public class MailAuthenticator extends Authenticator{
    	private  String username="15026933568";   
    	private  String password="******";   
    	
    	public MailAuthenticator() {
    		super();
    	}
    	
    	/**
    	 * 设置验证的用户名和密码
    	 */
    	public MailAuthenticator(String userName , String password) {
    		super();
    		this.username = userName;
    		this.password = password;
    	}
    	
    	protected PasswordAuthentication getPasswordAuthentication()
    	{   
    		return new PasswordAuthentication(this.username,this.password);   
    	}   
    }
    

      发送邮件类:

    package com.util.mail;
    
    
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.Address;
    import javax.mail.Authenticator;
    import javax.mail.Message;
    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 SendEmail 
    {
    	
    	/**  
    	* 发送普通邮件  
    	* @throws Exception  
    	*/   
    	public void doSendNormalMail() 
    	{   
    //		 获取系统环境  
    		Properties prop = new Properties();  
    		Authenticator auth = null;
    //		判断发送邮件是否需要验证
    		if (EmailMessage.validate) 
    		{
    //			 邮件服务器认证   用户名和密码
    			auth =	new MailAuthenticator();  
    		}
    //		添加必要的信息
    		prop.put("mail.smtp.host", EmailMessage.Email_Host);   
    		prop.put("mail.smtp.auth", "true");   
    		
    //		 设置对话和邮件服务器进行通讯
    		Session session = Session.getDefaultInstance(prop, auth);   
    //		在控制台显示Debug信息
    		session.setDebug(true);
    //		设置邮件对象
    		Message message = new MimeMessage(session);   
    		try 
    		{   
    //			 设置邮件主题 
    			message.setSubject(EmailMessage.Email_Subject);   
    //			 设置邮件标题   
    			message.setHeader("Header", EmailMessage.Email_Header); 
    //			  设置发送时间   
    			message.setSentDate(EmailMessage.sendDate);
    			
    //			 设置发信人地址  和 名字
    			Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);   
    //			把发件人信息添加到信息中
    			message.setFrom(address);   
    			
    //			设置发件人地址
    			Address toAddress = new InternetAddress(EmailMessage.TO); 
    //			 设置接收人地址
    			message.setRecipient(Message.RecipientType.TO, toAddress);   
    		  
    //		 	设置多个收件人地址   
    //		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));   
    
    //			 设置邮件格式
    			message.setContent("Content", EmailMessage.Email_Content); 
    //			 设置邮件内容    必须在设置文件格式后面
    			message.setText(EmailMessage.Email_Body); 
    			
    //			保存上面添加的信息
    			message.saveChanges();   
    //			 发送邮件 
    			System.out.println("sendNormalEmail() 开始发送邮件……");   
    			Transport.send(message);   
    			System.out.println("发送成功!");   
    		} catch (Exception e) {   
    				System.out.println("出错");   
    				e.printStackTrace();   
    		}   
    	}   
    	
    	/**
    	 * 发送HTML格式的邮件
    	 */
    	public void doSendHtmlMail() {   
    //		 获取系统环境  
    		Properties prop = new Properties();  
    
    		Authenticator auth = null;
    		if (EmailMessage.validate)
    		{
    //			 邮件服务器认证   用户名和密码
    			auth = new MailAuthenticator();
    		}
    //		添加必要的信息
    		prop.put("mail.smtp.host", EmailMessage.Email_Host);   
    		prop.put("mail.smtp.auth", "true");   
    		
    //		 设置对话和邮件服务器进行通讯
    		Session session = Session.getDefaultInstance(prop, auth);   
    		
    //		设置邮件对象
    		Message message = new MimeMessage(session);   
    		try 
    		{   
    //			 设置邮件主题 
    			message.setSubject(EmailMessage.Email_Subject);   
    //			 设置邮件标题   
    			message.setHeader("Header", EmailMessage.Email_Header); 
    //			  设置发送时间   
    			message.setSentDate(EmailMessage.sendDate);
    			
    //			 设置发信人地址  和 名字
    			Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);   
    //			把发件人信息添加到信息中
    			message.setFrom(address);   
    			
    //			设置发件人地址
    			Address toAddress = new InternetAddress(EmailMessage.TO); 
    //			 设置接收人地址
    			message.setRecipient(Message.RecipientType.TO, toAddress);   
    		  
    //		 	设置多个收件人地址   
    //		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));   
    
    //			设置发送信息的内容   下面为发送hmml
    //			设置邮件格式
    			EmailMessage.Email_Content = "text/html; charset=utf-8";
    			message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content); 
    
    //			保存上面添加的信息
    			message.saveChanges();   
    //			 发送邮件 
    			System.out.println("doSendHtmlMail() 开始发送邮件……");   
    			Transport.send(message);   
    			System.out.println("发送成功!");   
    		} catch (Exception e) {   
    				System.out.println("出错");   
    				e.printStackTrace();   
    		}   
    	}   
    	/**
    	 * 发送带有附件格式的邮件
    	 */
    	public void doSendAttachmentMail() 
    	{   
    //		 获取系统环境  
    		Properties prop = new Properties();  
    
    		Authenticator auth = null;
    		if (EmailMessage.validate)
    		{
    //			 邮件服务器认证   用户名和密码
    			auth = new MailAuthenticator();
    		}
    //		添加必要的信息
    		prop.put("mail.smtp.host", EmailMessage.Email_Host);   
    		prop.put("mail.smtp.auth", "true");   
    		
    //		 设置对话和邮件服务器进行通讯
    		Session session = Session.getDefaultInstance(prop, auth);   
    		
    //		设置邮件对象
    		Message message = new MimeMessage(session);   
    		try 
    		{   
    //			 设置邮件主题 
    			message.setSubject(EmailMessage.Email_Subject);   
    //			 设置邮件标题   
    			message.setHeader("Header", EmailMessage.Email_Header); 
    //			  设置发送时间   
    			message.setSentDate(EmailMessage.sendDate);
    			
    //			 设置发信人地址  和 名字
    			Address address = new InternetAddress(EmailMessage.FROM, EmailMessage.FROM_NAME);   
    //			把发件人信息添加到信息中
    			message.setFrom(address);   
    			
    //			设置发件人地址
    			Address toAddress = new InternetAddress(EmailMessage.TO); 
    //			 设置接收人地址
    			message.setRecipient(Message.RecipientType.TO, toAddress);   
    		  
    //		 	设置多个收件人地址   
    //		 	message.addRecipient(Message.RecipientType.TO,new InternetAddress("xxx@xxx.com"));   
    		  
    			
    //			设置发送信息的内容   下面为发送附件
    			message.setContent(EmailMessage.Email_Body, EmailMessage.Email_Content); 
    			
    			//BodyPart messageBodyPart = new MimeBodyPart();   
    			MimeBodyPart messageBodyPart = new MimeBodyPart(); 
    			String body = "<h4>内含附件、图文并茂的邮件测试!!!</h4> </br>" 
    	                + "<a href = http://haolloyin.blog.51cto.com/> 蚂蚁</a></br>" 
    	                + "<img src = "cid:logo_jpg"></a>";
    			
    			MimeBodyPart image = createContent(body,"E:\1.jpg");
    			messageBodyPart.setText("<img src='cid:image_fairy_tail'/>");   
    			
    			Multipart multipart = new MimeMultipart();   
    			//multipart.addBodyPart(messageBodyPart);   
    			
    			messageBodyPart = new MimeBodyPart();   
    			
    //			设置上传的资源
    			DataSource source = new FileDataSource("E:\3.txt");  
    //			添加到
    			messageBodyPart.setDataHandler(new DataHandler(source));   
    //			设置文件名称,记得后缀名
    			messageBodyPart.setFileName("3.txt");   
    			multipart.addBodyPart(messageBodyPart);
    			
    			
    			// 5. 创建图片“节点”
    			/*MimeBodyPart image = new MimeBodyPart();
    	        DataHandler dh = new DataHandler(new FileDataSource("E:\1.jpg")); // 读取本地文件
    	        image.setDataHandler(dh);                   // 将图片数据添加到“节点”
    	        image.setContentID("image_fairy_tail"); */    // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
    	     // 6. 创建文本“节点”
    	        MimeBodyPart text = new MimeBodyPart();
    	        //    这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片
    	        text.setContent("这是一张图片<br/><img src='cid:image_fairy_tail'/>", "text/html;charset=UTF-8");
    	        multipart.addBodyPart(image);
    	        multipart.addBodyPart(text);
    			
    			message.setContent(multipart);   
    			
    //			保存上面添加的信息
    			message.saveChanges();   
    //			 发送邮件 
    			System.out.println("doSendAttachmentMail() 开始发送邮件……");   
    			Transport.send(message);   
    			System.out.println("发送成功!");   
    		} catch (Exception e)
    		{   
    				System.out.println("出错");   
    				e.printStackTrace();   
    		}   
    	} 
    	
    	
    	/**  
         * 根据传入的邮件正文body和文件路径创建图文并茂的正文部分  
         */ 
        public MimeBodyPart createContent(String body, String fileName)  
                throws Exception {  
            // 用于保存最终正文部分  
            MimeBodyPart contentBody = new MimeBodyPart();  
            // 用于组合文本和图片,"related"型的MimeMultipart对象  
            MimeMultipart contentMulti = new MimeMultipart("related");  
     
            // 正文的文本部分  
            MimeBodyPart textBody = new MimeBodyPart();  
            textBody.setContent(body, "text/html;charset=utf-8");  
            contentMulti.addBodyPart(textBody);  
     
            // 正文的图片部分  
            MimeBodyPart jpgBody = new MimeBodyPart();  
            FileDataSource fds = new FileDataSource(fileName);  
            jpgBody.setDataHandler(new DataHandler(fds));  
            jpgBody.setContentID("logo_jpg");  
            contentMulti.addBodyPart(jpgBody);  
     
            // 将上面"related"型的 MimeMultipart 对象作为邮件的正文  
            contentBody.setContent(contentMulti);  
            return contentBody;  
        }
    	
    }
    

      发送邮件入口测试函数类:

           /**
    	 * @param args
    	 */
    	public static void main(String[] args)
    	{
                //new SendEmail().doSendNormalMail();
                //new SendEmail().doSendHtmlMail();
    	      new SendEmail().doSendAttachmentMail();
    	}
    

    创建好上述内容执行发送邮件测试函数:(发送正文包含文字图片,附件)

     

    源码下载地址:https://github.com/ablejava/JavaMail

  • 相关阅读:
    hdu 1496 equations(哈希)
    为什么要微服务化
    什么是分布式系统中的幂等性
    不积跬步无以至千里
    服务治理与微服务
    使用阿里开源工具 TProfiler 在海量业务代码中精确定位性能代码 (jvm性能调优)
    Spring MVC重定向和转发
    两个实体复制
    IntelliJ IDEA类头注释和方法注释
    Linux下单机安装部署kafka及代码实现
  • 原文地址:https://www.cnblogs.com/ablejava/p/5784472.html
Copyright © 2020-2023  润新知