本篇博客知识点:
1.简单的代码展示邮件发送
2.实际演示
3.网站中代码发邮箱的应用—通过邮箱激活账号
想要用Java发邮件必须要这两个包
package sendEmail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
/**
* 邮件发送
* @author<a href="mailto:hulonghua1996@qq.com">胡龙华</a>
* @version 2017-8-12 上午9:51:41
* @fileName sendEmail.java
*/
public class sendEmail {
public static void main(String[] args) {
String pwd = "********";
String sendMail = "hulonghua1996@163.com";
String reciMail = "*********";
String subject = "代码发送邮件成功";
String info = "代码发送邮件成功";
send(sendMail, pwd, reciMail, info, subject);
}
/**
* @param sendMail:发送邮箱
* @param pwd :密码
* @param reciMail:接接收者邮箱
* @param info : 邮件信息
* @param subject:邮件主题
*/
public static void send(String sendMail,final String pwd,String reciMail,String info,String subject) {
final String userName = sendMail.split("@")[0];
Properties p = new Properties();
// 如果是QQ 邮箱就把163改为qq(QQ邮箱可能因为需要授权码应该会没用)
p.setProperty("mail.host", "smtp.163.com");
p.setProperty("mail.smtp.auth", "true");
//与邮箱服务器建立会话
Session session = Session.getDefaultInstance(p,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,pwd);
}
});
session.setDebug(true);
//准备邮件内容
MimeMessage msg = new MimeMessage(session);
try {
//从哪儿发
msg.setFrom( new InternetAddress(sendMail));
//发到哪儿去
msg.setRecipient(RecipientType.TO, new InternetAddress(reciMail));
//设置主题
msg.setSubject(subject);
//设置内容和编码
msg.setContent(info,"text/html;charset=utf-8");
//设置发送日期
msg.setSentDate( new Date() );
//发送
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
我昨天测试发给QQ邮箱是可以的,今天试了一下就不行了。可能我的163邮箱 被QQ邮箱服务器定位垃圾广告了把
然后我自己给自己发 是没问题的 今天早上测试的
下面的代码是我练习的项目的代码的一部分,实现的功能是 用户在网站通过注册注册了账号,网站要验证邮箱是不是你本人在使用的,还是别人的,所以需要发送一个激活链接过去,主要是包括一个激活吧。 用户点击链接 再把激活码传给服务器,我们再去数据库验证。
(也需要前面的两个包)
package cn.hncu.pubs;
import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import cn.hncu.domain.User;
/**
* @author<a href="mailto:953801304@qq.com">胡龙华</a>
* @version 2017-8-12 上午10:05:39
* @fileName SendMailThread.java
*/
public class SendMailThread extends Thread{
private User user = null;
public SendMailThread(User user) {
this.user = user;
}
@Override
public void run() {
Properties p = new Properties();
p.setProperty("mail.host", "smtp.163.com");
p.setProperty("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(p,new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 下面两个参数 一个是邮箱账号 就@前面的部分 和你的密码
return new PasswordAuthentication("hulonghua1996","*****");
}
});
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
try {
msg.setFrom( new InternetAddress("hulonghua1996@163.com"));
msg.setRecipient(RecipientType.TO, new InternetAddress(user.getEmail()));
msg.setSubject("账号激活邮件,城院集团有有限公司欢迎你!");
String info = "激活:<a href='http://127.0.0.1:8080/MailWeb/ActiveServlet?acode="+user.getAcode()+"'>激活</a>";
info = info + "<br/>如果激活未成功,请把地址复制到浏览器进行手动请求以进行激活:http://127.0.0.1:8080/MailWeb/ActiveServlet?acode="+user.getAcode();
msg.setContent(info,"text/html;charset=utf-8");
msg.setSentDate( new Date() );
Transport.send(msg);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
}