SMTP发送邮件

7.1 SMTP

  SMTP是一个简单的基于文本的邮件协议,在这个协议上我们可以指定一条邮件消息和一个或多个接受者,然后进行邮件输出。SMTP协议再加上一个服务器地址就组成一个邮件访问方式。

比如:

  • QQ邮箱:smtp.qq.com
  • 163邮箱:smtp.163.com

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


 

7.2 JavaMail邮件发送

  SMTP应用

  这一节我们将实现如何使用代码,利用自己的QQ邮箱发送邮件。在上一节中,我们大致了解的SMTP协议,在使用QQ邮箱发送邮件时,我们需要先进入QQ邮箱开启SMTP支持。

开启QQ邮箱设置:

1.打开QQ邮箱设置

2.在QQ邮箱头部找到邮箱设置,切换到账户下面,如图

SMTP发送邮件

 

 3.往下边翻,开启和SMTP有关的服务。如图前两项

SMTP发送邮件

 

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

SMTP发送邮件

 

 注意:1.授权码没有空格,只是QQ邮箱为了分段显示而已。

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

JavaMail

  在Java中我们可以调用JavaMail调用和接受邮件,我们首先配置maven依赖,如pom文件加入

<dependency>
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4</version>
</dependency>

然后 ,如下发送代码
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("xxxxxxx@qq.com", "xxxx");
        }
      });
      //建立邮件对象
      MimeMessage message = new MimeMessage(session);
      //设置邮件的发件人
      message.setFrom(new InternetAddress("xxxxxxx@qq.com"));
      //2.设置邮件的收件人
      message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com");
      //设置邮件的主题
      message.setSubject("通过javamail发出!!!");
      //文本部分
      message.setContent("文本邮件测试", "text/html;charset=UTF-8");
      message.saveChanges();
      //发送邮件
      Transport.send(message);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

 例:用自己的QQ邮箱给自己发一封邮件,注意一下约定条件

1.设置邮件主题为:HELLO

2.设置邮件主题内容是:HELLOWORLD

3.发送邮件完成后,在console打印:“Send complete”信息

 

先在pom.xml文件中添加依赖库。

然后完成Mail类

 1 package com.youkeda.email;
 2 import java.security.Security;
 3 import java.util.Properties;
 4 import javax.mail.Authenticator;
 5 import javax.mail.Message;
 6 import javax.mail.PasswordAuthentication;
 7 import javax.mail.Session;
 8 import javax.mail.Transport;
 9 import javax.mail.internet.InternetAddress;
10 import javax.mail.internet.MimeMessage;
11 
12 public class Mail {
13     public static void main(String[] args) {
14         try {
15             final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
16 
17             //配置邮箱信息
18             Properties props = System.getProperties();
19             //邮件服务器
20             props.setProperty("mail.smtp.host", "smtp.qq.com");
21             props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
22             props.setProperty("mail.smtp.socketFactory.fallback", "false");
23             //邮件服务器端口
24             props.setProperty("mail.smtp.port", "465");
25             props.setProperty("mail.smtp.socketFactory.port", "465");
26             //鉴权信息
27             props.setProperty("mail.smtp.auth", "true");
28             //建立邮件会话
29             Session session = Session.getDefaultInstance(props, new Authenticator() {
30                 //身份认证
31                 protected PasswordAuthentication getPasswordAuthentication() {
32                     //1.账户 授权码
33                     return new PasswordAuthentication("1026509698@qq.com", "rdzdvorugfsxbebe");
34                 }
35             });
36             //建立邮件对象
37             MimeMessage message = new MimeMessage(session);
38             //设置邮件的发件人
39             message.setFrom(new InternetAddress("1026509698@qq.com"));
40             //2.设置邮件的收件人
41             message.setRecipients(Message.RecipientType.TO, "1026509698@qq.com");
42             //设置邮件的主题
43             message.setSubject("HELLO");
44             //文本部分
45             message.setContent("HELLOWORLD", "text/html;charset=UTF-8");
46             message.saveChanges();
47             //发送邮件
48             Transport.send(message);
49             System.out.println("Send complete");
50         } catch (Exception e) {
51             e.printStackTrace();
52         }
53     }
54 }

不一会儿,就收到了自己发来的邮件,感觉不错。

SMTP发送邮件

上一篇:kFreeBsd 国内开源镜像站汇总


下一篇:设计模式与设计原则