Java 发送Email,Java 邮件发送工具类封装
这几天由于本人的服务器不打算用阿里云了,所以把项目的数据都拷下来,顺便拿些开发过程中的经验来分享给大家,希望一起学习一起进步,代码中有什么错误的请指出,多谢大家观看。
第一篇博客,打算用最早做的一个工具类开头,毕竟很多人在开发过程中会自己封装工具类,此篇文章内容是关于邮件的,直接上代码。
这个是15年在大三做的一个,于是重新封装了一下:
Java 发送邮件代码封装
public static void sendEmail(String sendEmail, String sendEmailPwd, String title, String content,
String[] toEmilAddress) throws Exception {
Properties props = new Properties();
// 开启debug调试,以便在控制台查看
props.setProperty("mail.debug", "true");
// 设置邮件服务器主机名
props.setProperty("mail.host", "smtp.qq.com");
// 发送服务器需要身份验证
props.setProperty("mail.smtp.auth", "true");
// 发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
Session session = Session.getInstance(props);
Message msg = new MimeMessage(session);
// 发送的邮箱地址
msg.setFrom(new InternetAddress(sendEmail));
// 设置标题
msg.setSubject(title);
// 设置内容
msg.setContent(content, "text/html;charset=gbk;");
Transport transport = session.getTransport();
// 设置服务器以及账号和密码
//这里端口改成465
transport.connect("smtp.qq.com", sendEmail, sendEmailPwd);
// 发送到的邮箱地址
transport.sendMessage(msg, getAddress(toEmilAddress));
transport.close();
}
private static Address[] getAddress(String[] emilAddress) throws Exception {
Address[] address = new Address[emilAddress.length];
for (int i = 0; i < address.length; i++) {
address[i] = new InternetAddress(emilAddress[i]);
}
return address;
}
上面这段就是我封装成了一个工具类,具体用法注释里都有,原理就是要开启腾讯企业邮箱或者个人邮箱的SMTP
端口(不懂的可以百度,这里不详细说明),之前端口号好像是443
,测试是不能用的,于是换成了465
对于String sendEmail, String sendEmailPwd
这两个参数,其实需要在配置文件里面加上发送人的邮箱和已开启POP3
和SMTP
服务的密匙(不是发送人邮箱的密码)
封装成工具类可能很多人看不懂,所以我准备了个可以直接跑的demo
:↓
Java邮件发送测试Demo
public class Demo {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();
prop.setProperty("mail.debug", "true");
// 设置邮件服务器主机名
prop.setProperty("mail.host", "smtp.qq.com");
// 发送服务器需要身份验证
prop.setProperty("mail.smtp.auth", "true");
// 发送邮件协议名称
prop.setProperty("mail.transport.protocol", "smtp");
// 开启SSL加密,否则会失败
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
// 创建session
Session session = Session.getInstance(prop);
// 通过session得到transport对象
Transport ts = session.getTransport();
// 连接邮件服务器:邮箱类型,帐号,授权码代替密码(更安全)
ts.connect("smtp.qq.com", "873******416@qq.com", "rh******be");
// 创建邮件
Message message = createSimpleMail(session);
// 发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
public static MimeMessage createSimpleMail(Session session)
throws Exception {
// 创建邮件对象
MimeMessage message = new MimeMessage(session);
// 指明邮件的发件人
message.setFrom(new InternetAddress("87****16@qq.com"));
// 指明邮件的收件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(
"40****474@qq.com"));
// 邮件的标题
message.setSubject("QQ邮件测试");
// 邮件的文本内容
message.setContent("老子终于能发送邮件了!", "text/html;charset=UTF-8");
// 返回创建好的邮件对象
return message;
}
}
注:jdk8
以上直接跑会有报错 SSL 错误,于是顺带解决了一下jdk8
发送邮件失败的BUG
,经过一番资料查询,原因是因为保密协议出错具体原因百度找不到,所以我替换了7的两个包,附件里有,在jdk里面下的/jre/lib/security
,然后demo
需要的包网上也有,就是javax.mail.jar
,如果有谁知道jdk8
如何解决SSL
问题的,求告知。。。。 或者能在jdk9
下写了个类似工具类的,欢迎分享经验。
处女贴,求顶=( ̄▽ ̄*)b
版权所属:SO JSON在线解析
原文地址:https://www.sojson.com/blog/235.html
转载时必须以链接形式注明原始出处及本声明。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。