邮件发送之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

以下实例均为QQ邮箱或网易邮箱测试不同类型邮箱发送者参数不同,一般开启服务的时候回有提示,注意查看

发送者QQ邮箱需要设置:

1、打开QQ邮箱-->账号-->账户安全,开启pop3/SMTP服务

2、开启以后,点击上图生成授权码的地方生成授权码,发送的时候需要使用它作为密码

3、在QQ邮箱帮助中心可继续查看服务的其他参数,如下两图中的发送邮件服务器smtp.qq.com、发送端口587或者465等都是需要的参数:

邮件发送测试后台代码:

@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();
	}

结果:

打开手机查看:

163邮箱同样需要开启服务:

工具封装示例,我认为这个类我写得很不好,懒得改就这样吧:

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

测试过均有效,但是发送相同附件可能会被网易邮箱认为发送的是垃圾邮件,被系统退回来

猜你喜欢

转载自blog.csdn.net/qq_37575994/article/details/100155994
今日推荐