使用Java 发送邮件

使用Java 发送邮件

这一段代码是假期之前,同学需要编写一个网站注册验证时,我写的发送验证码的类,把耦合的比较紧的验证码生成、发送固定标题和内容的部分删掉,单独提出来的邮件发送类。东西比较简单,当时赶时间也是四处搜刮代码拼凑出来的,感觉还能再抽象提炼一些。

  • 注意:
    1. 代码中使用到了一个不在JDK中的jar包,mail.jar需要下载
    2. 使用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();
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值