天天看點

郵件發送之commons-email

jar包下載下傳位址:

https://repo1.maven.org/maven2/javax/mail/mail/1.5.0-b01/mail-1.5.0-b01.jar

https://www-eu.apache.org/dist//commons/email/binaries/commons-email-1.5-bin.zip

郵件發送之commons-email

以下執行個體均為QQ郵箱或網易郵箱測試,不同類型郵箱發送者參數不同,一般開啟服務的時候回有提示,注意檢視

發送者QQ郵箱需要設定:

1、打開QQ郵箱-->賬号-->賬戶安全,開啟pop3/SMTP服務

郵件發送之commons-email

2、開啟以後,點選上圖生成授權碼的地方生成授權碼,發送的時候需要使用它作為密碼

3、在QQ郵箱幫助中心可繼續檢視服務的其他參數,如下兩圖中的發送郵件伺服器smtp.qq.com、發送端口587或者465等都是需要的參數:

郵件發送之commons-email
郵件發送之commons-email

郵件發送測試背景代碼:

@Test
	public void testCommonsEmail() throws EmailException {	
		//1、定義一個附件并設定附件屬性
		//1.1檔案
		File file = new File("E:/大二程式代碼集/java/eclipse/Mail/src/attch.txt");
		//1.2附件
		EmailAttachment attach = new EmailAttachment();
		attach.setPath(file.getAbsolutePath());
		attach.setDisposition(EmailAttachment.ATTACHMENT);
		attach.setDescription("我隻是一個附件描述");//描述
		attach.setName(file.getName());//附件名
		//2、定義一個帶附件的郵件并設定相關屬性 并将附件挂在郵件中
		MultiPartEmail mail = new MultiPartEmail();
		mail.setHostName("smtp.qq.com");//發送郵件的伺服器
		mail.setSmtpPort(587);//發送郵件的伺服器端口号
		mail.setAuthenticator(new DefaultAuthenticator("[email protected]","授權碼"));//使用者名為發送者郵箱号,密碼為授權碼,注意在QQ郵箱設定網頁擷取
		mail.setSSLOnConnect(true);//使用SSL
		mail.setFrom("[email protected]");//發送者郵箱号
		mail.setSubject("郵件主題");
		mail.setMsg("郵件正文");
		mail.addTo("[email protected]");//接收者郵箱号
		mail.attach(attach);//将附件挂上郵件中
		//3、發送
		mail.send();
	}
           

結果:

郵件發送之commons-email

打開手機檢視:

郵件發送之commons-email

163郵箱同樣需要開啟服務:

郵件發送之commons-email

工具封裝示例,我認為這個類我寫得很不好,懶得改就這樣吧:

package mail;

import java.io.File;

import org.apache.commons.mail.EmailAttachment;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.MultiPartEmail;
import org.apache.commons.mail.SimpleEmail;

/**
 * 郵件發送工具
 * @author LuoPiao
 *
 */
public class EmailUtil {
	//發送者郵箱
	private String userName;
	//郵箱授權碼
	private String password;
	//發送郵件的伺服器
	private String smtp;
	public static final String SMTPQQ="smtp.qq.com";
	public static final String SMTP163="smtp.163.com";
	//伺服器端口号
	private Integer port=null;
	public static final Integer PORTQQ1=587;
	public static final Integer PORTQQ2=465;
	//字元編碼集的設定
	private String encode;//不設定預設為utf-8
	/**
	 * 不提供端口号
	 * @param userName發件人
	 * @param password授權碼
	 * @param smtp發送郵件伺服器
	 */
	public EmailUtil(String userName, String password, String smtp) {
		this.userName = userName;
		this.password = password;
		this.smtp = smtp;
		this.encode="utf-8";
	}
	/**
	 * 初始化發件環境
	 * @param userName發件人
	 * @param password授權碼
	 * @param smtp發送郵件伺服器
	 * @param encode字元編碼集
	 */
	public EmailUtil(String userName, String password, String smtp,String encode) {
		this.userName = userName;
		this.password = password;
		this.smtp = smtp;
		this.encode=encode;
	}
	/**
	 * 初始化發件環境
	 * @param userName發件人
	 * @param password授權碼
	 * @param smtp發件伺服器
	 * @param port端口号
	 */
	public EmailUtil(String userName, String password, String smtp, Integer port) {
		this.userName = userName;
		this.password = password;
		this.smtp = smtp;
		this.port = port;
		this.encode="utf-8";
	}
	/**
	 * 初始化發件環境
	 * @param userName發件人
	 * @param password授權碼
	 * @param smtp發件伺服器
	 * @param port伺服器端口号
	 * @param encode字元編碼集
	 */
	public EmailUtil(String userName, String password, String smtp, Integer port, String encode) {
		this.userName = userName;
		this.password = password;
		this.smtp = smtp;
		this.port = port;
		this.encode = encode;
	}
	/**
	 * 發送簡單郵件
	 * @param message正文
	 * @param subject主題
	 * @param ToEmail收件人
	 * @return
	 */
	public  boolean sendSimpleEmail(String message,String subject,String ToEmail) {
		SimpleEmail email=new SimpleEmail();
		try {
			email.setFrom(userName);
			email.setAuthentication(userName, password);
			email.setHostName(smtp);
			email.setCharset(encode);
			email.setHostName(smtp);
			if(port!=null) {
				email.setSmtpPort(port);
			}
			email.setMsg(message);
			email.setSubject(subject);
			email.addTo(ToEmail);
			email.send();
			return true;
		} catch (EmailException e) {
			return false;
		}
	}
	/**
	 * 發送帶附件郵件
	 * @param message
	 * @param subject
	 * @param ToEmail
	 * @param files 可為0到多
	 * @return
	 */
	public boolean sendEmailAttach(String  message,String subject,String ToEmail,File...files) {
		MultiPartEmail email = new MultiPartEmail();
		for (int i = 0; i < files.length; i++) {
			EmailAttachment attach = new EmailAttachment();//建立附件
			attach.setPath(files[i].getAbsolutePath());//附件位址
			attach.setDisposition(EmailAttachment.ATTACHMENT);
			attach.setDescription(files[i].getName());//附件描述 
			attach.setName(files[i].getName());//附件名稱
			try {
				email.attach(attach);//添加附件到郵件,可添加多個
			} catch (EmailException e) {
				return false;
			}
		}
		try {
			email.setFrom(userName);
			email.setAuthentication(userName, password);
			email.setHostName(smtp);
			email.setCharset(encode);
			email.setHostName(smtp);
			if(port!=null) {
				email.setSmtpPort(port);
			}
			email.setMsg(message);
			email.setSubject(subject);
			email.addTo(ToEmail);
			email.send();
			return true;
		} catch (EmailException e) {
			return false;
		}
	}
	
}
           

測試代碼:

EmailUtil eu=new EmailUtil("[email protected]", "xxx", EmailUtil.SMTPQQ,EmailUtil.PORTQQ1);
Boolean flag=eu.sendSimpleEmail("測試ing", "主題", "[email protected]");
           
EmailUtil eu1=new EmailUtil("[email protected]", "xxxx", EmailUtil.SMTP163);
Boolean flag1=eu1.sendEmailAttach("測試ing1", "主題1", "[email protected]");
System.out.println(flag1);
           
EmailUtil eu2=new EmailUtil("[email protected]", "xxxx", EmailUtil.SMTPQQ);
File file = new File("E:/大二程式代碼集/java/eclipse/Mail/src/attch.txt");
Boolean flag2=eu2.sendEmailAttach("測試ing3", "主題2", "[email protected]",file,file,file);
System.out.println(flag2);
           

測試過均有效,但是發送相同附件可能會被網易郵箱認為發送的是垃圾郵件,被系統退回來