天天看點

使用javamail利用SMTP服務發送郵件

在使用163或qq等郵箱發送郵件的時,需要在郵箱的設定中打開SMTP服務才能使用郵箱用戶端軟體登陸到郵箱伺服器上發送郵件

需要下載下傳javamail.jar包,官網下載下傳位址為 點選打開連結

本人已上傳javamail1.5.2版本到CSDN,點選打開連結

package mail;
import java.util.Date;
import java.util.Properties;

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.MimeMessage;

import com.sun.mail.util.MailSSLSocketFactory;

public class JavaMailTextSender {
	String SMTPHost = "";// SMTP伺服器
	String user = "";// 登陸SMTP伺服器的賬号
	String password = "";// 登陸SMTP伺服器的密碼
	String from = "";// 發件人郵箱
	String to = "";// 收件人郵箱
	String subject = "";// 郵箱标題 主題
	String content = "";// 郵件内容
	boolean html = true;// 檔案内容為html格式
	boolean ssl = false;// 是否使用ssl
	// 指定郵件優先級 1:緊急,3:普通,5:緩慢
	String priority = "3";

	public static void main(String[] args) {
		JavaMailTextSender mailTextSender = new JavaMailTextSender();
		mailTextSender.setSMTPHost("smtp.qq.com");// SMTP伺服器 如果是163郵箱則是smtp.163.com
		mailTextSender.setUser("[email protected]");// 登陸SMTP伺服器的賬号
		mailTextSender.setPassword("*****");// 登陸SMTP伺服器的密碼 即郵箱賬号密碼
		mailTextSender.setFrom("[email protected]");// 發件人郵箱
		mailTextSender.setTo("[email protected]");// 收件人郵箱
		mailTextSender.setSubject("主題");// 郵箱标題 主題
		mailTextSender.setContent("<font color=red>郵件正文</font>");// 郵件内容
		mailTextSender.setHtml(true);// 檔案内容為html格式
		mailTextSender.setSsl(true);// 是否使用ssl
		
		boolean succ = mailTextSender.sendMain();
		if (succ) {
			System.out.println("郵件發送成功");
		} else {
			System.out.println("失敗!");
		}
	}

	// 構造函數
	public JavaMailTextSender() {
	}

	// 發送郵件
	public boolean sendMain() {
		// 建立一個屬性對象
		Properties props = new Properties();
		// 指定SMTP伺服器
		props.put("mail.smtp.host", getSMTPHost());
		// 指定是否需要SMTP驗證
		props.put("mail.smtp.auth", "true");

		try {
			if (isSsl()) {
				MailSSLSocketFactory sfFactory = new MailSSLSocketFactory();
				sfFactory.setTrustAllHosts(true);
				// or
				// sfFactory.setTrustedHosts(new String[]{"my-server"});
				props.put("mail.smtp.ssl.enable", "true");
				// also use following for additional safety
				// props.put("mail.smtp.ssl.checkserveridentity", "true");
				props.put("mail.smtp.ssl.socketFactory", sfFactory);

			}
			// 建立一個授權驗證對象
			SmtpAuth auth = new SmtpAuth();
			auth.setAccount(getUser(), getPassword());
			// 建立一個Session對象
			Session mailSession = Session.getDefaultInstance(props, auth);
			mailSession.setDebug(true);
			// 建立一個Message對象
			Message message = new MimeMessage(mailSession);

			// 指定發件人郵箱
			message.setFrom(new InternetAddress(getFrom()));
			// 指定收件人郵箱
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					getTo()));
			// 指定郵件主題
			message.setSubject(getSubject());
			if (isHtml()) {
				// 指定郵件内容,郵件的MIME類型指定為html格式,編碼方式為uft-8
				message.setContent(getContent(), "text/html;charset=utf-8");
			} else {
				// 指定郵件内容 郵件的 MIME類型預設指定為 "text/plain"
				message.setText(getContent());
			}
			// 指定郵件發送日期
			message.setSentDate(new Date());
			// 指定郵件優先級 1:緊急,3:普通,5:緩慢
			message.setHeader("X-Priority", getPriority());
			message.saveChanges();
			// 建立一個Transport對象
			// Transport類根據指定的郵件發送協定(如SMTP),通過指定的賬号和密碼連接配接指定的郵件發送伺服器發送郵件。
			Transport transport = mailSession.getTransport("smtp");
			// 連接配接SMTP伺服器
			transport.connect(getSMTPHost(), getUser(), getPassword());
			// 發送郵件
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	// 定義一個SMTP授權驗證類
	/**
	 * JavaMail API通過使用授權類(Authenticator)以使用者名、密碼的方式通路郵件伺服器
	 * 
	 * @author Administrator
	 * 
	 */
	static class SmtpAuth extends Authenticator {
		String user, password;

		/**
		 * 設定使用者名和密碼,用于通路郵件伺服器
		 * 
		 * @param user
		 * @param password
		 */
		void setAccount(String user, String password) {
			this.user = user;
			this.password = password;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(user, password);
		}
	}

	// 屬性的getter和setter
	public String getSMTPHost() {
		return SMTPHost;
	}

	public void setSMTPHost(String sMTPHost) {
		SMTPHost = sMTPHost;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPassword() {
		return password;
	}

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

	public String getFrom() {
		return from;
	}

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

	public String getTo() {
		return to;
	}

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

	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;
	}

	public boolean isSsl() {
		return ssl;
	}

	public void setSsl(boolean ssl) {
		this.ssl = ssl;
	}

	public boolean isHtml() {
		return html;
	}

	public void setHtml(boolean html) {
		this.html = html;
	}

	public String getPriority() {
		return priority;
	}

	public void setPriority(String priority) {
		this.priority = priority;
	}

}