package com;

import java.util.Properties;

import javax.mail.Address;
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;

/*
 * 发送邮件的类
 * 引入mail.jar包
 */
public class Mail {

	private MimeMessage mimeMsg;// 邮件对象
	private Session session; // 邮件会话对象
	private Properties props; // 系统属性,即SMTP服务器
	private String username; // 用户名
	private String password; // 密码
	private Multipart mp; // 对象用于封装邮件内容

	// 构造方法
	public Mail(String smtp) {
		setSmtpHost(smtp);
		createMimeMessage();
	}

	// 设置邮件发送服务器
	public void setSmtpHost(String hostName) {
		System.out.println("设置系统属性:mail.smtp.host=" + hostName);
		if (props == null) {
			props = System.getProperties();// 获得系统属性对象
		}
		props.put("mail.smtp.host", hostName);// 设置SMTP主机
	}

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

			return true;
		} catch (Exception e) {
			System.out.println("创建MIME邮件对象失败!" + e);
			return false;
		}
	}

	/*
	 * 设置SMTP是否需要验证
	 */
	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");
		}
	}

	public void setNamePass(String name, String pass) {
		username = name;
		password = pass;
	}

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

	/*
	 * 设置邮件正文
	 */
	public boolean setBody(String mailBody) {
		try {
			BodyPart bp = new MimeBodyPart();
			bp.setContent("" + mailBody, "text/html;charset=UTF-8");
			mp.addBodyPart(bp);

			return true;
		} catch (Exception e) {
			System.err.println("设置邮件正文时发生错误!" + e);
			return false;
		}
	}

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

	/*
	 * 设置收信人
	 */
	public boolean setTo(String to) {
		if (to == null)
			return false;
		System.out.println("设置收信人!");
		try {
			mimeMsg.setRecipients(Message.RecipientType.TO,
					InternetAddress.parse(to));
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/*
	 * 设置抄送人
	 */
	public boolean setCopyTo(String copyto) {
		if (copyto == null)
			return false;
		try {
			mimeMsg.setRecipients(Message.RecipientType.CC,
					(Address[]) InternetAddress.parse(copyto));
			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.getRecipients(Message.RecipientType.TO));

			System.out.println("发送邮件成功!");
			transport.close();

			return true;
		} catch (Exception e) {
			System.err.println("邮件发送失败!" + e);
			return false;
		}
	}

	/*
	 * 调用sendOut方法完成邮件发送
	 */
	public static boolean sendAndCc(String smtp, String from, String to,
			String copyto, String subject, String content, String username,
			String password) {
		Mail theMail = new Mail(smtp);
		theMail.setNeedAuth(true); // 需要验证

		if (!theMail.setSubject(subject))
			return false;
		if (!theMail.setBody(content))
			return false;
		if (!theMail.setTo(to))
			return false;
		if (!theMail.setCopyTo(copyto))
			return false;
		if (!theMail.setFrom(from))
			return false;
		theMail.setNamePass(username, password);

		if (!theMail.sendOut())
			return false;
		return true;
	}
}
最近下载更多
伊不归  LV6 2022年4月20日
zhaojialiang  LV7 2021年5月14日
ma406805131  LV15 2020年6月18日
周大福  LV12 2020年2月27日
怎么了  LV14 2019年1月14日
oceanchen  LV14 2018年8月29日
17608417105  LV9 2018年8月22日
MYECLIPSEyar  LV10 2018年7月30日
lw19900921  LV25 2018年7月5日
ruiyang  LV5 2018年7月4日
最近浏览更多
1358849392  LV21 2022年12月27日
伊不归  LV6 2022年4月20日
1306878374  LV13 2022年4月12日
无语问苍天  LV1 2021年7月30日
luesjim  LV11 2021年6月18日
zhaojialiang  LV7 2021年5月14日
喵小兵  LV10 2021年3月13日
wcdmayb  LV7 2021年2月14日
pxqtsht  LV16 2021年1月28日
Jason137  LV8 2020年12月4日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友