java发送邮件

邮件发送协议

要在网络上实现邮件功能,必须要有专门的邮件服务器。这些邮件服务器类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。

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

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

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

邮件发送流程

在这里插入图片描述

发送邮件

需要的jar包

  • mail.jar
  • activation.jar

使用qq邮箱发送一封普通邮件

qq邮箱发送邮件需要获取授权码
在这里插入图片描述

package com.wcy;

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;

/**
 * 使用qq邮箱发送一封简单的邮件
 */
public class EmailTest01 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        // 配置
        Properties properties = new Properties();
        // 设置qq邮件服务器
        properties.setProperty("mail.host","smtp.qq.com");
        // 邮件发送协议
        properties.setProperty("mail.transport.protocol","smtp");
        // 需要验证
        properties.setProperty("mail.smtp.auth","true");

        //QQ邮箱需要设置SSL加密 只是qq邮箱需要
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);

        //创建一个session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 这里的password是qq邮箱获取的授权码
                return new PasswordAuthentication("sepcai@qq.com","授权码");
            }
        });

        //开启debug模式
        session.setDebug(true);

        //java发送邮件的步骤

        //1 获取连接对象
        Transport transport = session.getTransport();
        //2 连接服务器
        transport.connect("smtp.qq.com","sepcai@qq.com","授权码");

        //3 创建邮件对象
        MimeMessage mimeMessage = new MimeMessage(session);
        //邮件发送人
        mimeMessage.setFrom(new InternetAddress("sepcai@qq.com"));
        //邮件接收人
        mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("sepcai@163.com"));
        //邮件标题
        mimeMessage.setSubject("Hello");
        //邮件内容
        mimeMessage.setContent("<h1>来了</h1>","text/html;charset=UTF-8");

        //4发送邮件
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
        //5关闭连接
        transport.close();
    }
}

发送内嵌图片邮件

在这里插入图片描述

package com.wcy;

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.security.GeneralSecurityException;
import java.util.Properties;

/**
 * 发送含有图片的邮件
 */
public class EmailTest02 {
    public static void main(String[] args) throws GeneralSecurityException, MessagingException {
        // 配置
        Properties properties = new Properties();
        // 设置qq邮件服务器
        properties.setProperty("mail.host", "smtp.qq.com");
        // 邮件发送协议
        properties.setProperty("mail.transport.protocol", "smtp");
        // 需要验证
        properties.setProperty("mail.smtp.auth", "true");

        //QQ邮箱需要设置SSL加密 只是qq邮箱需要
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);

        //创建一个session对象
        Session session = Session.getDefaultInstance(properties, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // 这里的password是qq邮箱获取的授权码
                return new PasswordAuthentication("sepcai@qq.com", "授权码");
            }
        });

        //开启debug模式
        session.setDebug(true);

        //java发送邮件的步骤

        //1 获取连接对象
        Transport transport = session.getTransport();
        //2 连接服务器
        transport.connect("smtp.qq.com", "sepcai@qq.com", "授权码");

        //3 创建邮件对象
        MimeMessage mimeMessage = prepareEmail(session);
        //邮件发送人
        mimeMessage.setFrom(new InternetAddress("sepcai@qq.com"));
        //邮件接收人
        mimeMessage.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("sepcai@163.com"), new InternetAddress("2104706490@qq.com")});


        //4发送邮件
        transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
        //5关闭连接
        transport.close();
    }

    //编写邮件内容
    public static MimeMessage prepareEmail(Session session) throws MessagingException {
        //1.准备图片
        MimeBodyPart bodyPart = new MimeBodyPart();
        //2.将图片变为数据流
        //获取图片数据
        FileDataSource fileDataSource = new FileDataSource("E:\\java_program\\程序\\javaWeb\\File\\SendEmail\\src\\bg.jpg");
        //需要一个处理数据流的处理器来处理
        DataHandler dataHandler = new DataHandler(fileDataSource);
        //把图片数据放到邮件的正文中
        bodyPart.setDataHandler(dataHandler);
        //给图片设置一个名字
        bodyPart.setContentID("bg.jpg");
        //设置文本内容
        MimeBodyPart bodyPart2 = new MimeBodyPart();
        //给第二个邮件内容插入图片 通过图片ID插入
        bodyPart2.setContent("这是一封内嵌图片的邮件" + "<img src='cid:bg.jpg'>", "text/html;charset=utf-8");
        //拼接邮件,描述关系
        MimeMultipart multipart = new MimeMultipart();
        multipart.addBodyPart(bodyPart);
        multipart.addBodyPart(bodyPart2);

        //描述邮件类型:related表示邮件为内嵌类型 mixed表示邮件为附件类型
        multipart.setSubType("related");
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setContent(multipart);

        //设置标题
        mimeMessage.setSubject("来了老弟");
        //保存设置
        mimeMessage.saveChanges();
        return mimeMessage;
    }
}

发送带附件的邮件

package com.wcy;

import com.sun.mail.util.MailSSLSocketFactory;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.security.GeneralSecurityException;
import java.util.Properties;


public class EmailTest04 {
    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);
        //1、创建定义整个应用程序所需的环境信息的 Session 对象
        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //传入发件人的姓名和授权码
                return new PasswordAuthentication("sepcai@qq.com", "授权码");
            }
        });
        session.setDebug(true);
        //2、通过session获取transport对象
        Transport transport = session.getTransport();
        //3、通过transport对象邮箱用户名和授权码连接邮箱服务器
        transport.connect("smtp.qq.com", "sepcai@qq.com", "授权码");
        //4、创建邮件,传入session对象
        MimeMessage mimeMessage = complexEmail(session);
        //5、发送邮件
        transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
        //6、关闭连接
        transport.close();
    }
    public static MimeMessage complexEmail(Session session) throws MessagingException {
        //消息的固定信息
        MimeMessage mimeMessage = new MimeMessage(session);
        //发件人
        mimeMessage.setFrom(new InternetAddress("sepcai@qq.com"));
        //收件人
        mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress("sepcai@qq.com"));
        //邮件标题
        mimeMessage.setSubject("带图片和附件的邮件");
        //邮件内容
        //准备图片数据
        MimeBodyPart image = new MimeBodyPart();
        DataHandler handler = new DataHandler(new FileDataSource("E:\\java_program\\程序\\javaWeb\\File\\SendEmail\\src\\bg.jpg"));
        image.setDataHandler(handler);
        image.setContentID("test.png"); //设置图片id
        //准备文本
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("这是一段文本<img src='cid:test.png'>","text/html;charset=utf-8");
        //附件
        MimeBodyPart appendix = new MimeBodyPart();
        appendix.setDataHandler(new DataHandler(new FileDataSource("D:\\桌面\\文档\\阿里巴巴Java开发手册1.4.0.pdf")));
        appendix.setFileName("test.pdf");

        //拼装邮件正文
        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(image);
        mimeMultipart.addBodyPart(text);
        mimeMultipart.setSubType("related");//文本和图片内嵌成功
        //将拼装好的正文内容设置为主体
        MimeBodyPart contentText = new MimeBodyPart();
        contentText.setContent(mimeMultipart);
        //拼接附件
        MimeMultipart allFile = new MimeMultipart();
        allFile.addBodyPart(appendix);//附件
        allFile.addBodyPart(contentText);//正文
        allFile.setSubType("mixed"); //正文和附件都存在邮件中,所有类型设置为mixed
        //放到Message消息中
        mimeMessage.setContent(allFile);
        mimeMessage.saveChanges();//保存修改
        return mimeMessage;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值