`

sendMail

 
阅读更多

 

sendMail

 

package net.chnbs.common.mail;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Multipart;
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;
import javax.mail.internet.MimeUtility;

import net.chnbs.finance.constants.BusinessConstants;
import net.chnbs.util.SystemGlobals;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;


/**
 * <p>Description:use the javamail to send email!Must use sun's mail.jar,no apache jar. </p>
 */
@Component
public class SendMail {

	public final static Log log = LogFactory.getLog(SendMail.class);

	public static void main(String[] args) {
		String to = SystemGlobals.getProperty("NOTICE_MAIL_ADDRESS");
		log.info(to);
		SendMail mail = new SendMail();
		mail.setTo("system@qq.net");
		mail.setFrom("system@qq.net");
		mail.setSmtpServer("system@qq.net");
		mail.setUserName("system@qq.net");
		mail.setPassword("");
		mail.setSubject("关于网站有客户申请来电的通知");
		mail.setContent(String.format(BusinessConstants.NOTICE_CONTENT_STRING,
				"1342604332","小伙子哦"));
		mail.send();
	}
	
	private String to;			//接收人
	private String from;		//发送人
	private String smtpServer;	//smtp地址.
	private String userName;	
	private String password;
	private String subject;
	private String content;

	// 记录所有附件文件的集合,发送邮件的附件
	List<String> attachments = new ArrayList<String>();

	public SendMail() {
		super();
	}

	public SendMail(String to, String from, String smtpServer, String userName, String password, String subject,
			String content) {
		this.to = to;
		this.from = from;
		this.smtpServer = smtpServer;
		this.userName = userName;
		this.password = password;
		this.subject = subject;
		this.content = content;
	}

	//将字符串转换为中文,否则标题会发生乱码现象,QQ邮箱为UTF-8.用GBK.GB2312都会乱码.
	public String translateChinese(String strText) {
		try {
			// MimeUtility.encodeText(String text, String charset, String
			// encoding) throws java.io.UnsupportedEncodingException
			// text 头值 . charset 字符集。如果此参数为 null,则使用平台的默认字符集。
			// encoding 要使用的编码。当前支持的值为 "B" 和 "Q"。如果此参数为 null,则在大部分字符使用 ASCII
			// 字符集编码时使用 "Q" 编码;其他情况使用 "B" 编码。
			strText = MimeUtility.encodeText(new String(strText.getBytes(), "UTF-8"), "UTF-8", "B");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return strText;
	}

	//增加附件
	public void addAttachment(String fname){
		attachments.add(fname);
	}
	
	public boolean send(){
		//创建邮件Session所需的Properties对象.API建议使用set而不是put(putall).
		Properties props=new Properties();
		props.setProperty("mail.smtp.host", smtpServer);
		props.setProperty("mail.smtp.auth", "true");
		//创建Session对象,代表JavaMail中的一次邮件会话.
		//Authenticator==>Java mail的身份验证,如QQ邮箱是需要验证的.所以需要用户名,密码.
		//PasswordAuthentication==>系统的密码验证.内部类获取,或者干脆写个静态类也可以.
		Session session=Session.getDefaultInstance(props, 
				new Authenticator() {
						public PasswordAuthentication getPasswordAuthentication(){
							return new PasswordAuthentication(userName, password);
						}
					}
				);
		
		try {
			//构造MimeMessage并设置相关属性值,MimeMessage就是实际的电子邮件对象.
			MimeMessage msg=new MimeMessage(session);
			//设置发件人
			msg.setFrom(new InternetAddress(from));
			//设置收件人,为数组,可输入多个地址.
			InternetAddress[] addresses={new InternetAddress(to)};
			//Message.RecipientType==>TO(主要接收人),CC(抄送),BCC(密件抄送)
			msg.setRecipients(Message.RecipientType.TO, addresses);
			//设置邮件主题,如果不是UTF-8就要转换下.
			//subject=translateChinese(subject);
			msg.setSubject(subject);
			
			//=====================正文部分===========
			//构造Multipart容器
			Multipart mp=new MimeMultipart();
			//=====================正文文字部分===========
			//向Multipart添加正文
			MimeBodyPart mbpContent=new MimeBodyPart();
			mbpContent.setText(content);
			//将BodyPart添加到MultiPart容器中
			mp.addBodyPart(mbpContent);
			
			//=====================正文附件部分===========
			//向MulitPart添加附件,遍历附件列表,将所有文件添加到邮件消息里
			for(String efile:attachments){
				MimeBodyPart mbpFile=new MimeBodyPart();
				//以文件名创建FileDataSource对象
				FileDataSource fds=new FileDataSource(efile);
				//处理附件
				mbpFile.setDataHandler(new DataHandler(fds));
				mbpFile.setFileName(fds.getName());
				//将BodyPart添加到Multipart容器中
				mp.addBodyPart(mbpFile);
			}
			attachments.clear();
			//向MimeMessage添加Multipart
			msg.setContent(mp);
			msg.setSentDate(new Date());
			//发送邮件,使用如下方法!
			Transport.send(msg);
			log.info("邮件发送成功!--------->"+this.to+"----"+this.getContent());
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	
	
	public String getTo() {
		return to;
	}

	public void setTo(String to) {
		this.to = to;
	}

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}

	public String getSmtpServer() {
		return smtpServer;
	}

	public void setSmtpServer(String smtpServer) {
		this.smtpServer = smtpServer;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getSubject() {
		return subject;
	}

	public void setSubject(String subject) {
		this.subject = subject;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}
	
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics