java 发邮件主送能发送抄送没有发送 java邮局派发信件_java

邮件传输的原理分析

做一个东西一定要分析原理,建立架构,再编写代码
在网络上实现邮件传输需要邮件服务器

假设有两个人,张三李四,他们有两台不一样的电脑,张三想给李四发一封邮件

中间有一个基站来帮助他们通信,通过网络传输

他们有两个真实的邮箱,不同的邮箱有自己的服务器

基站先把张三发出的邮件存到网易服务器里,服务器通过基站找到qq的服务器,放入

李四通过电脑访问qq服务器,从中取出信件

发送邮件:SMTP协议

接收邮件:POP3协议

服务器内部有一个POP3接收,还有一个SMTP发送,下面还有一个文件系统FileSystem,每个账户有一定的空间

注册一个账号相当于在文件系统中申请一个地址

java 发邮件主送能发送抄送没有发送 java邮局派发信件_后端_02

JAVA实现过程

使用Java发送E-mail十分简单,但是首先你应该准备JavaMail API和Java Activation Framework

得到两个jar包

  • mail.jar
  • activation.jar

    MainlDemo01
package com.lding;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;

/**
 * @program: FileTransport
 * @description:
 * @author: 王丁
 * @date: 2021-11-13 10:41
 **/
public class MailDemo01 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        Properties prop=new Properties();
        prop.setProperty("mail.host","smtp.qq.com");//设置qq邮件服务器
        prop.setProperty("mail.transport.protocol","smtp");//邮箱发送协议
        prop.setProperty("mail.smtp.auth","true");//需要验证用户名密码
        //关于qq邮箱,还要设置SSL加密,加上以下代码即可
        MailSSLSocketFactory sf=new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
       // prop.put("mail.smtp.ssl.enable","true");
        //prop.put("mail.smtp.ssl.socketFactory",sf);

        //使用JavaMail发送邮件的5个步骤
        //1、创建定义整个应用程序所需的环境信息的Session对象
        //QQ才有!其他邮箱不用
        Session session= Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("邮箱","验证码");
            }
        });
        session.setDebug(true);
        //2、通过session得到transport对象
        Transport ts=session.getTransport();
        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("smtp.qq.com","邮箱","验证码");
        //4、创建邮件:写邮件
        //注意需要传递Session
        MimeMessage message=new MimeMessage(session);
        //指明邮件的发件人
        message.setFrom(new InternetAddress("邮箱"));
        //指明邮件的发件人,现在发件人和收件人是一样的,那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("邮箱"));
        //邮件的标题
        message.setSubject("你好世界!");
        //邮件的文本内容
        message.setContent("<h1 style='color:red'>你好啊!</h1>","text/html;charset=UTF-8");
        //5、发送邮件
        ts.sendMessage(message,message.getAllRecipients());
        //6.关闭连接
        ts.close();

    }
}

运行结果

java 发邮件主送能发送抄送没有发送 java邮局派发信件_java 发邮件主送能发送抄送没有发送_03


java 发邮件主送能发送抄送没有发送 java邮局派发信件_后端_04


实现之前我们还需要开启qq邮箱的POP3/SMTP服务才可以实现

java 发邮件主送能发送抄送没有发送 java邮局派发信件_后端_05