使用Java 发送邮件
这一段代码是假期之前,同学需要编写一个网站注册验证时,我写的发送验证码的类,把耦合的比较紧的验证码生成、发送固定标题和内容的部分删掉,单独提出来的邮件发送类。东西比较简单,当时赶时间也是四处搜刮代码拼凑出来的,感觉还能再抽象提炼一些。
- 注意:
- 代码中使用到了一个不在JDK中的jar包,mail.jar需要下载
- 使用Java发邮件开启了邮箱服务器的SSL验证,这需要在QQ邮箱设置中开启
3.当时我使用QQ邮箱作为邮箱服务器,发现QQ邮箱服务器有授权码一说,意思是类似于下面这种通过代码发邮件的时候,使用授权码代替密码,以防密码泄露,所以提醒使用QQ邮箱的人,请首先在QQ邮箱的设置中获得授权码。
以下是整个的代码
import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
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 Mail{
private final String user="邮箱名";
private final String pass="密码";//QQ邮箱使用授权码,需要去邮箱的设置里面找
//收件人、邮件标题、邮件内容
private String mailTo;
private String mailTitle;
private String mailMessage;
所有可设置字段的getter、setter
public String getMailTo() {
return mailTo;
}
public void setMailTo(String mailTo) {
this.mailTo = mailTo;
}
public String getMailTitle() {
return mailTitle;
}
public void setMailTitle(String mailTitle) {
this.mailTitle = mailTitle;
}
public String getMailMessage() {
return mailMessage;
}
public void setMailMessage(String mailMessage) {
this.mailMessage = mailMessage;
}
//三个构造函数
public Mail(String mailTo,String mailTitle,String mailMessage){
this.mailTo=mailTo;
this.mailTitle=mailTitle;
this.mailMessage=mailMessage;
}
public Mail(String mailTo){
this.mailTo=mailTo;
}
public Mail(){}
//验证是否邮件状态正确
public boolean checkMail(){
if(mailTo!=null&&mailTitle!=null&&mailMessage!=null) return true;
return false;
}
public void SendMail() throws GeneralSecurityException, MessagingException{
//邮件状态不正确,取消发送
if(!checkMail()){
System.out.println("mail state wrong");
return ;
}
Properties prop = new Properties();
//开启ssl验证
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
prop.put("mail.smtp.ssl.enable", "true");
prop.put("mail.smtp.ssl.socketFactory", sf);
//输出debug信息
//prop.setProperty("mail.debug", "true");
//服务器
prop.setProperty("mail.host", "smtp.qq.com");
//prop.setProperty("mail.smtp.port", "25");
//传输方式
prop.setProperty("mail.transport.protocol", "smtp");
prop.setProperty("mail.smtp.auth", "true");
// 创建session
Session session = Session.getInstance(prop);
Transport ts = null;
// 通过session得到transport对象
ts = session.getTransport();
// 连上邮件服务器
ts.connect(user,pass);
MimeMessage message = new MimeMessage(session);
// 邮件消息头
/* 邮件的发件人,可以不设置成自己的真实邮箱
对方通过正常手段(邮件客户端、网页)收到邮件,看不到真实的发件人,而只能看到这里设置的发件人
*/
message.setFrom(new InternetAddress(user)); // 邮件的发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailTo)); // 邮件的收件人
message.setSubject(mailTitle); // 邮件的标题
// 邮件消息体
message.setText(mailMessage);
// 发送邮件
ts.sendMessage(message, message.getAllRecipients());
ts.close();
}
}