07-邮件发送

邮件发送

介绍

  • 要在网络上实现邮件功能,必须要有专门的邮件服务器。

  • 这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

  • SMTP服务器地址:一般是 smtp.xxx.com,比如163邮箱是smtp.163.com,qq邮箱是smtp.qq.com。

  • 电子邮箱(E-Mail地址)的获得需要在邮件服务器上进行申请。比如我们要使用QQ邮箱,就需要开通邮箱功能。

传输协议

SMTP协议:发送邮件:

  • 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。

POP3协议:接收邮件:

  • 我们通常把处理用户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。

收发原理

在这里插入图片描述

  1. 大狂神通过smtp协议连接到smtp服务器,然后发送一封邮件给网易的邮件服务器.
  2. 网易分析发现需要去QQ的邮件服务器,通过smtp协议将邮件转投给QQ的smtp服务器.
  3. QQ将接收到的邮件存储在[email protected]这个邮件账号的空间中.
  4. 小狂神通过Pop3协议连接到Pop3服务器收取邮件.
  5. [email protected]这个邮件账号的空间中取出邮件.
  6. Pop3服务器将取出来的邮件送到小狂神手中.

在这里插入图片描述

01-servlet代码

import com.sun.mail.util.MailSSLSocketFactory;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.util.Properties;

public class sendMail {
    
    
    public static void main(String[] args)throws Exception {
    
    
        Properties properties = new Properties();
        properties.setProperty("mail.host","smtp.qq.com");//设置QQ邮件服务器
        properties.setProperty("mail.transport.protocol","smtp");//设置QQ邮件发送协议
        properties.setProperty("mail.smtp.auth","true");//验证用户名和密码


        //关于QQ邮箱,还要设置SSL加密
        MailSSLSocketFactory mailSSL = new MailSSLSocketFactory();
        mailSSL.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable","true");
        properties.put("mail.smtp.ssl.socketFactory",mailSSL);

        //使用Java发送邮件的步骤


        //1.创建定义整个程序所需的环境信息Session对象

        //qq独有
        Session session=Session.getDefaultInstance(properties, new Authenticator() {
    
    
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
    
    
                return new PasswordAuthentication("[email protected]","wemrbvbtyaniebab");
            }
        });

        //2.通过session得到transport对象

        Transport ts = session.getTransport();

        //3.使用邮箱的用户名和授权码连上邮件服务器

        ts.connect("smtp.qq.com","[email protected]","wemrbvbtyaniebab");

        //4.创建邮件
        MimeMessage message = new MimeMessage(session);
        //指明发送邮件人
        message.setFrom(new InternetAddress("[email protected]"));
        //指明邮件的收件人
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("[email protected]"));
        //指明邮件的标题
        message.setSubject("只包含文本的内容");
        //准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler dh = new DataHandler(new FileDataSource("src\\resources\\bz.jpg"));
        image.setDataHandler(dh);
        image.setContentID("bz.jpg");
        //邮件的文本内容
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("<h1>你好啊</h1><img src='cid:bz.jpg'>","text/html;charset=UTF-8");
        //描述数据关系
        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(image);
        mimeMultipart.addBodyPart(text);
        mimeMultipart.setSubType("related");//mixed最大
        //保存到数据中
        message.setContent(mimeMultipart);
        message.saveChanges();
        //5.发送邮件

        ts.sendMessage(message,message.getAllRecipients());
        ts.close();
    }
}

``

猜你喜欢

转载自blog.csdn.net/qq_52117201/article/details/129404534