`
TimerBin
  • 浏览: 355597 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java mail

    博客分类:
  • JAVA
阅读更多

一、java Mail 简单案例  学习笔记

基于Maven前期准备(这里使用1.4.7为例)

<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>

 

1、发送邮件代码如下所示

package com.xxxxx.mp2.utils;

import java.io.File;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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 {
	
    public static void main(String[] args) {
          new SendEmail().sendEmails("xxxxxs@xxx.com");
    }
 
    /**
      * 
      * @param email 接收方 邮件地址
      */
    public void  sendEmails(String email){
	try {
		//定义电子邮件
		MimeMessage msg = nakeMail("标题","内容",new InternetAddress(email));
		//发送电子邮件
		Transport.send(msg);
	} catch (Exception e) {
		e.printStackTrace();
	}
    }

	/**
	 * 
	 * @param title 邮件标题
	 * @param content 邮件内容
	 * @param email to EmailAddress 邮件接收方 数组
	 * @return
	 */
	private  MimeMessage nakeMail(String title,String content,InternetAddress ... email) throws  Exception {
	    //定义发送邮件的属性信息
		Properties prop = new Properties();
	    //使用发送邮件的服务器 常见的有 smtp.163.com    smtp.21cn.com smtp.sina.com.cn smtp.sohu.com smtp.126.com
	    prop.put("mail.smtp.host", "smtp.xxxxxx.com");
	    //通知邮件服务器为此次访问授权
	    prop.put("mail.smtp.auth", "true");
	    //创建会话 java 详见: http://haolloyin.blog.51cto.com/1177454/354585
	    Session session = Session.getDefaultInstance(prop, new Authenticator(){
	    	 @Override
	         protected PasswordAuthentication getPasswordAuthentication() {
	    		 //form email Address and password
	             return new PasswordAuthentication("邮箱发送方用户名","邮箱密码");
	         }
	    });
	    //设置为调试会话   ----在运行过程中会将发送邮件的实时日志打印到控制台
	    session.setDebug(true);
	    //电子邮件汇总信息
	    MimeMessage message = new MimeMessage(session);
	    //邮件发送方
	    message.setFrom(new InternetAddress("邮箱用户名"));
	    
	    message.setRecipients(Message.RecipientType.TO, email);
	    //邮件标题
	    message.setSubject(title);
	    //邮件内容
	    message.setText(content, null, "html");
	    //查找附件是否存在
	    File file = new File("附件地址");
	    if(file.exists()){
	    	 //邮件正文对象-定义一个空的邮件正文对象
	    	 MimeMultipart allPart = new MimeMultipart("mixed"); 
	    	 //定义附件存放容器对象--定义一个空的附件存放容器
	         MimeBodyPart attachmentPart1 = new MimeBodyPart();
	         MimeBodyPart attachmentPart2 = new MimeBodyPart();
	         //读取附件信息
	         FileDataSource fds1 = new FileDataSource("附件地址");
	         FileDataSource fds2 = new FileDataSource("附件地址");
	         //将附件信息存入到空容器中
	         attachmentPart1.setDataHandler(new DataHandler(fds1));
	         attachmentPart2.setDataHandler(new DataHandler(fds2));
	         //附件名称
	         attachmentPart1.setFileName(fds1.getName());  
	         attachmentPart2.setFileName(fds2.getName());  
	         //将附件容器对象存放到邮件正文中
	         allPart.addBodyPart(attachmentPart1);  
	         allPart.addBodyPart(attachmentPart2);  
	         //将新的正文叠加到电子邮件中
	         message.setContent(allPart);
	         //将修改同步到电子邮件中--刷新同步
	         message.saveChanges();  
	    }
	    return message;
	}

}

 

 

2、常遇问题

1)、未加授权,以下授权代码未加

 prop.put("mail.smtp.auth", "true");

错误内容如下:

javax.mail.MessagingException: Can't send command to SMTP host;
  nested exception is:
 java.net.SocketException: Software caused connection abort: socket write error

2)、邮件内容包含链接地址时,为个别邮箱发送邮件时,需要在邮件内容或邮件标题中加上"邮件验证"四个字,否则个别邮箱始终无法收到邮件(qq)。

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics