Java实战邮件推送

一、SMTP协议

  SMTP是一个简单的基于文本的邮件传输协议,全称为(Simple Mail Transfer Protocol - 简单邮件传输协议)。在这个协议上,我们可以指定一条邮件消息和一个或者多个邮件接收者,然后进行邮件输出。

网络地址 = 协议 + 地址 

同样的道理,SMTP协议 + 服务器地址也可以组成一个邮件访问方式,所有的邮件服务商都有自己的邮件服务器地址

例如:

QQ邮箱:smtp.qq.com

163邮箱:smtp.163.com

通过地址和协议,我们便具有发送邮件的基础通道,使用Java或者其他的编程语言,可以使用SMTP完成邮件的发送,不必打开网页登录邮箱发送邮件了

二、JavaMail邮件发送

SMTP应用

在使用QQ邮箱发送邮件时,我们需要先进入QQ邮箱开启SMTP支持

开启QQ邮箱设置

1.打开QQ邮箱网页版

2.在QQ邮箱头部找到邮箱设置,切换到账户,往下翻开启SMTP有关的服务

3.开启过程中可能会有各种验证,最终得到授权码

授权码没有空格,只是QQ邮箱为了分段显示而已

授权码不是邮箱的登录密码,不要混淆

JavaMail

在Java中我们调用JavaMail发送和接收邮件,首先,配置依赖


 javax.mail
 mail
 1.4

话不多说,上代码

import java.security.Security;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailClient {
  public static void main(String[] args) {
    try {
      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

      //配置邮箱信息
      Properties props = System.getProperties();
      //邮件服务器
      props.setProperty("mail.smtp.host", "smtp.qq.com");
      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
      props.setProperty("mail.smtp.socketFactory.fallback", "false");
      //邮件服务器端口
      props.setProperty("mail.smtp.port", "465");
      props.setProperty("mail.smtp.socketFactory.port", "465");
      //鉴权信息
      props.setProperty("mail.smtp.auth", "true");
      //建立邮件会话
      Session session = Session.getDefaultInstance(props, new Authenticator() {
        //身份认证
        protected PasswordAuthentication getPasswordAuthentication() {
          //1.账户 授权码
          return new PasswordAuthentication("[email protected]", "xxxx");
        }
      });
      //建立邮件对象
      MimeMessage message = new MimeMessage(session);
      //设置邮件的发件人
      message.setFrom(new InternetAddress("[email protected]"));
      //2.设置邮件的收件人
      message.setRecipients(Message.RecipientType.TO, "[email protected]");
      //设置邮件的主题
      message.setSubject("通过javamail发出!!!");
      //文本部分
      message.setContent("文本邮件测试", "text/html;charset=UTF-8");
      message.saveChanges();
      //发送邮件
      Transport.send(message);
      System.out.println("发送完毕");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

1.注释 1 中账户和授权码改为自己的QQ号,和刚才申请保存的授权码

2.注释 2 中message.setRecipients可以设置多个收件人信息(用逗号分割多个收件人)

3.所有的xxxx改为自己的邮箱地址,否则自己看不到邮件内容

你可能感兴趣的:(新Java网络编程,服务器,网络,运维)