Java 邮件发送[2]

今天审核了一下昨天发的Java邮件发送工具类发现其中有许多可优化的地方,分享给大家。



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);
	}
}
---------------------------
/**   
* 发送邮件需要使用的基本信息 
*author by wangfun
http://www.5a520.cn 小说520  
*/
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;
	/**  邮件抄送人  **/
	private String[] copyTo;


	public String[] getCopyTo() {
		return copyTo;
	}

	public void setCopyTo(String[] copyTo) {
		this.copyTo = copyTo;
	}

	/**
	 * 获得邮件会话属性
	 */
	public Properties getProperties() {
		Properties p = new Properties();
		p.put("mail.smtp.host", this.mailServerHost);
		p.put("mail.smtp.port", this.mailServerPort);
		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;
	}
}
----------------------------------------

import java.util.Date;
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;

import org.apache.commons.lang.StringUtils;


/**
 * 邮件发送
 */
public class SimpleMailSender {


	/**
	 * 以HTML格式或文本(txt)格式发送邮件,可带附件
	 * @param mailInfo  待发送的邮件信息
	 * @param isHtml 是否是HTML格式true HTML  false TXT 
	 */
	public static boolean sendMail(MailSenderInfo mailInfo ,boolean isHtml) {
		// 判断是否需要身份认证
		MyAuthenticator authenticator = null;
		Properties pro = mailInfo.getProperties();
		try {
			// 如果需要身份认证,则创建一个密码验证器
			if (mailInfo.isValidate()) {
				authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
			}
			// 根据邮件会话属性和密码验证器构造一个发送邮件的session
			Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
			// 根据session创建一个邮件消息
			Message mailMessage = new MimeMessage(sendMailSession);
			if(StringUtils.isNotBlank(mailInfo.getFromAddress())){
				// 创建邮件发送者地址
				Address from = new InternetAddress(mailInfo.getFromAddress());
				// 设置邮件消息的发送者
				mailMessage.setFrom(from);
			}
			
			//设置收件人
			String to = StringUtils.join(mailInfo.getToAddress(), ",");
			InternetAddress[] toList = InternetAddress.parse(to);   
	        mailMessage.setRecipients(Message.RecipientType.TO,toList); 
			//设置通知人
	        if(mailInfo.getCopyTo() != null ){
	        	String cc = StringUtils.join(mailInfo.getCopyTo(), ",");
	        	InternetAddress[] ccList = InternetAddress.parse(cc);  
	        	mailMessage.setRecipients(Message.RecipientType.CC,ccList);      
	        }
			// 设置邮件消息的主题
			mailMessage.setSubject(mailInfo.getSubject());
			// 设置邮件消息发送的时间
			mailMessage.setSentDate(new Date());
			// MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
			Multipart mainPart = new MimeMultipart();
			// 附件内容
			if(mailInfo.getAttachFileNames() != null){
				String filePath[] = mailInfo.getAttachFileNames();
				MimeBodyPart filePart; 
				FileDataSource filedatasource;  
				for (int j = 0; j < filePath.length; j++) {  
					filePart = new MimeBodyPart();  
					filedatasource = new FileDataSource(filePath[j]);  
					filePart.setDataHandler(new DataHandler(filedatasource));  
					try {  
						filePart.setFileName(MimeUtility.encodeText(filedatasource.getName()));  
					} catch (Exception e) {  
						e.printStackTrace();  
					}  
					mainPart.addBodyPart(filePart);  
				}  
			}
			// 保存邮件
			mailMessage.saveChanges();
			if(isHtml){
				// 创建一个包含HTML内容的MimeBodyPart
				BodyPart html = new MimeBodyPart();
				// 设置HTML内容
				html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
				mainPart.addBodyPart(html);
				// 将MiniMultipart对象设置为邮件内容
				mailMessage.setContent(mainPart);
			}else{
				// 设置邮件消息的主要内容
				mailMessage.setText(mailInfo.getContent());
			}
			// 发送邮件
			Transport.send(mailMessage);
			return true;
		} catch (MessagingException ex) {
			ex.printStackTrace();
		}
		return false;
	}
	
	
	
}


以上便是今天写的邮件发送类,

写的不好的地方请大家指出。谢谢!!!







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值