Java邮件发送

package com...util;

import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
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;
import javax.mail.internet.MimeUtility;
/**
*邮件发送帮助类
**/
public class MailUtil {
private MimeMessage mimeMsg; // MIME邮件对象
private Session session; // 邮件会话对象
private Properties props; // 系统属性
private boolean needAuth = false; // smtp是否需要认证
// smtp认证用户名和密码
private String username;
private String password;
private Multipart mp; // Multipart对象,邮件内容,标题,附件等内容均添加到其中后再生成MimeMessage对象

/**
 * Constructor
 * 
 * @param smtp
 *            邮件发送服务器
 */
public MailUtil(String smtp){ 
	setSmtpHost(smtp); 
	createMimeMessage(); 
} 

/**
 * 设置邮件发送服务器
 * 
 * @param hostName
 *            String
 */
public  void setSmtpHost(String hostName) { 
	// System.out.println("设置系统属性:mail.smtp.host = "+hostName);
	if(props == null)
		props = System.getProperties(); // 获得系统属性对象
	props.setProperty("mail.smtp.socketFactory.class",
			"javax.net.ssl.SSLSocketFactory");

	props.setProperty("mail.smtp.socketFactory.fallback", "false");

	props.put("mail.smtp.host", hostName); // 设置SMTP主机
	props.setProperty("mail.smtp.port", "465");//qq设置465///25

} 


/**
 * 创建MIME邮件对象
 * 
 * @return
 */
public boolean createMimeMessage() 
{ 
	try { 
		// System.out.println("准备获取邮件会话对象!");
		session = Session.getDefaultInstance(props, null); // 获得邮件会话对象
		session.setDebug(true);
	} 
	catch(Exception e){ 
		System.err.println("获取邮件会话对象时发生错误!" + e);
		return false; 
	} 

	// System.out.println("准备创建MIME邮件对象!");
	try { 
		mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
		mp = new MimeMultipart(); 
	
		return true; 
	} catch(Exception e){ 
		System.err.println("创建MIME邮件对象失败!" + e);
		return false; 
	} 
} 	

/**
 * 设置SMTP是否需要验证
 * 
 * @param need
 */
public void setNeedAuth(boolean need) { 
	// System.out.println("设置smtp身份认证:mail.smtp.auth = "+need);
	if(props == null) props = System.getProperties(); 
	if(need){ 
		props.put("mail.smtp.auth","true"); 
	}else{ 
		props.put("mail.smtp.auth","false"); 
	} 
} 

/**
 * 设置用户名和密码
 * 
 * @param name
 * @param pass
 */
public void setNamePass(String name,String pass) { 
	username = name; 
	password = pass; 
} 

/**
 * 设置邮件主题
 * 
 * @param mailSubject
 * @return
 */
public boolean setSubject(String mailSubject) { 
	// System.out.println("设置邮件主题!");
	try{ 
		mimeMsg.setSubject(mailSubject); 
		return true; 
	} 
	catch(Exception e) { 
		System.err.println("设置邮件主题发生错误!");
		return false; 
	} 
}

/**
 * 设置邮件正文
 * 
 * @param mailBody
 *            String
 */ 
public boolean setBody(String mailBody) { 
	try{ 
		BodyPart bp = new MimeBodyPart(); 
		bp.setContent(""+mailBody,"text/html;charset=GBK"); 
		mp.addBodyPart(bp); 
		return true; 
	} catch(Exception e){ 
		System.err.println("设置邮件正文时发生错误!" + e);
	return false; 
	} 
} 

/**
 * 添加附件
 * 
 * @param filename
 *            String
 */ 
public boolean addFileAffix(String filename) { 

	// System.out.println("增加邮件附件:"+filename);
	try{ 
		BodyPart bp = new MimeBodyPart(); 
		FileDataSource fileds = new FileDataSource(filename); 
		bp.setDataHandler(new DataHandler(fileds)); 
		bp.setFileName(MimeUtility.encodeText(fileds.getName())); 		
		mp.addBodyPart(bp); 
		return true; 
	} catch(Exception e){ 
		System.err.println("增加邮件附件:" + filename + "发生错误!" + e);
		return false; 
	} 
} 

/**
 * 设置发信人
 * 
 * @param from
 *            String
 */ 
public boolean setFrom(String from) { 
	// System.out.println("设置发信人!");
	try{ 
		
		mimeMsg.setFrom(new InternetAddress(from)); // 设置发信人
		
		return true; 
	} catch(Exception e) { 
		return false; 
	} 
} 

/**
 * 设置收信人
 * 
 *  设置属性
 *	private Properties p; // p是属性集合类,用来设置邮件的一些属性比如timeout等
 *	p.put("userName","xxx@163.com"); //这里填上你的邮箱(发送方)
 *  构件MimeMessage 对象,并设置在发送给收信人之前给自己(发送方)抄送一份
 *	MimeMessage msg = mailSender.createMimeMessage();
 *  msg.addRecipients(MimeMessage.RecipientType.CC, InternetAddress.parse(p.getProperty("userName")));
 *
 * @param to
 *            String
 */ 
public boolean setTo(String[] to,String from){ 
	if(to == null)return false; 
	
	try{ 
		mimeMsg.addRecipients(Message.RecipientType.CC,InternetAddress.parse(from));//给自己抄送一份
		
		int mailSize = to.length;
		for(int i = 0; i < mailSize; i++){
			InternetAddress toStr = new  InternetAddress(to[i]);
			mimeMsg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(toStr.toString()));
		}
		
		return true; 
	} catch(Exception e) { 
		return false; 
	} 	
} 

/**
 * 发送邮件
 */ 
public boolean sendOut() 
{ 
	try{ 
		mimeMsg.setContent(mp); 
		mimeMsg.saveChanges(); 
		// System.out.println("正在发送邮件....");
		
		Session mailSession = Session.getInstance(props,null); 
		Transport transport = mailSession.getTransport("smtp"); 
		transport.connect((String)props.get("mail.smtp.host"),username,password); 
		//transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
		transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.CC));
		transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
		 System.out.println("发送邮件成功!");
		transport.close(); 			
		return true; 
	} catch(Exception e) { 
		System.err.println("邮件发送失败!" + e);
		return false; 
	} 
} 

/**
 * 调用sendOut方法完成邮件发送
 * 
 * @param smtp
 * @param from
 * @param to
 * @param subject
 * @param content
 * @param username
 * @param password
 * @return boolean
 */
public static boolean send(String smtp,String from,String[] to,String subject,String content,String username,String password) {
	MailUtil theMail = new MailUtil(smtp);
	theMail.setNeedAuth(true); // 需要验证
	
	if(!theMail.setSubject(subject)) return false;
	if(!theMail.setBody(content)) return false;
	if(!theMail.setTo(to,from)) return false;
	if(!theMail.setFrom(from)) return false;
	theMail.setNamePass(username,password);
	
	if(!theMail.sendOut()) return false;
	return true;
}

/**
 * 调用sendOut方法完成邮件发送,带附件
 * 
 * @param smtp
 * @param from
 * @param to
 * @param subject
 * @param content
 * @param username
 * @param password
 * @param filename
 *            附件路径
 * @return
 */
public static boolean send(String smtp,String from,String[] to,String subject,String content,String username,String password,String filename) {
	MailUtil theMail = new MailUtil(smtp);
	theMail.setNeedAuth(true); // 需要验证
	
	if(!theMail.setSubject(subject)) return false;
	if(!theMail.setBody(content)) return false;
	if(!theMail.addFileAffix(filename)) return false; 
	if(!theMail.setTo(to,from)) return false;
	if(!theMail.setFrom(from)) return false;
	theMail.setNamePass(username,password);
	if(!theMail.sendOut()) return false;
	return true;
}

}
测试类
// Mail.host=smtp.163.com
// Mail.from=***@163.com
// Mail.username=@163.com//邮箱地址
// Mail.password=
//邮箱密码
public class MailTest {
public static void main(String[] args) {
String host = "smtp.aliyun.com";
String from = "@aliyun.com";
String[] toUser = new String[]{"
@qq.com"};
String subject = "测试邮件发送";
String username = "";
String password = "
";
String content = "测试发送内容";
boolean falg = MailUtil.send(host, from, toUser, subject, content,username, password);
System.out.println(falg);
}

}

posted @ 2019-04-03 15:23  星梦想  阅读(245)  评论(0)    收藏  举报