Java-Mail Java程序发送Email

本文介绍如何使用Java程序发送带有附件的电子邮件。首先需要配置邮箱的第三方登录功能,并获取授权码。接着导入必要的jar包并创建工具类,用于设置邮件服务器及认证信息。最后通过示例代码展示如何构建邮件内容并发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java-Mail Java程序发送Email


      首先我们需要拥有的是一个账号,不管是什么邮箱账号,最好是163邮箱账号(无所谓)。
      有了邮箱账号我们要做的就是去开启邮箱的第三方登录功能。在我们登陆了邮箱之后,我们要按照下图中的步骤去操作开启第三方登陆的功能。

这里写图片描述


这里写图片描述


      所有的有关SMTP相关的服务都打开,这里会设置一个秘钥,类似于第三方登陆的密码,所以大家要记住这秘钥,我们在程序中会用的到这个秘钥。
      上面这些东西虽然不涉及编码,但是这是最基本的要求,要不我们编写的程序再好也无法完成通过程序发送邮件的功能。

第二部分

编码部分

我们需要导入两个jar包,一个mail.jar , 一个是activation.jar 。
网上去down这两个jar包,down不到的话私信我,发给你。
下面我们封装了一个工具类,具体代码如下 :

package com.mail.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;

public class MailUtils {
    //创建Session时需要传递的参数
    private static Properties prop;
    private static String username;
    private static String password;
    private static Properties prop1;
    static{
        InputStream in = MailUtils.class.getClassLoader().getResourceAsStream("userinfo.properties");
        prop1 = new Properties();
        try {
            prop1.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        username = prop1.getProperty("username");
        password = prop1.getProperty("password");
        prop = new Properties();
        //设置服务器地址属性、指向163邮箱的服务器
        prop.setProperty("mail.host","smtp.163.com");
        //将身份校验功能开启
        prop.setProperty("mail.smtp.auth","true");

    }
    public static Session getSession(){
        //内部类重写器返回用户名和密码的方法

        Authenticator authenticator = new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                //此处的username是我们的邮箱名 :  wolf1437715969
                //此处的passowrd是我们的我们前面提到的秘钥 , 不是该邮箱的登录面
                PasswordAuthentication passwordAuthentication = new PasswordAuthentication(username,password);
                return passwordAuthentication;
            }
        };
        Session session = Session.getInstance(prop, authenticator);
        return session;
    }
}

      上面的userinfo.properties就类似于原生jdbc中的四大参数,但是这的话,只有登录名和第三方登录秘钥。
      发送邮件的代码如下所示 :

package com.mail.service;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import com.mail.util.MailUtils;

public class SendMail1 {
    public static void main(String[] args) {
        Session session = MailUtils.getSession();
        MimeMessage msg = new MimeMessage(session);
        try {
            //这是发件人的邮箱,这个@163.com前面的号码应该和前面的properties中的信息保持一致
            msg.setFrom(new InternetAddress("wolf143771596@163.com"));
            //这是发送,就是所谓的明送,就是收件人是谁
            msg.setRecipients(RecipientType.TO,"143771596@qq.com");
            //这是添加抄送
            msg.setRecipients(RecipientType.CC,"wolf143771596@126.com");
            //这是添加暗送
            msg.setRecipients(RecipientType.BCC,"lilei1355@718.com");
            //这是邮件的标题
            msg.setSubject("小狼人");
            //这是邮件的信息和格式
            msg.setContent("Hello 西伯利亚狼 ,我试小狼人 ","text/html;charset=utf-8");
            //发送邮件
            Transport.send(msg);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }
}   

这里写图片描述

上图很清晰的反应了代码中的实现。

      上述是发送一个文本信息,没有附件,下面我们发送一个带附件的email,看到这,你不应该继续往下看,而是去把上面的代码熟悉,敲熟,下面的只是扩展。

package com.mail.service;

import java.io.File;
import java.io.IOException;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeUtility;

import com.mail.util.MailUtils;

public class SendMail1 {
    public static void main(String[] args) {
        Session session = MailUtils.getSession();
        MimeMessage msg = new MimeMessage(session);
        MimeMultipart parts = new MimeMultipart();
        MimeBodyPart part1 = new MimeBodyPart();
        MimeBodyPart part2 = new MimeBodyPart();
        MimeBodyPart part3 = new MimeBodyPart();
        try {
            //设置邮件标题
            msg.setSubject("发送多个文件");
            //第一部分,文本
            part1.setContent("Hello 西伯利亚狼 ,我试小狼人 ","text/html;charset=utf-8");

            //添加需要发送的第二个文件
            part2.attachFile(new File("E:/me.jpg"));
            //设置该文件在邮件中的附件名
            part2.setFileName(MimeUtility.encodeText("wolf.jpg"));

            //添加第三个需要发送的文件
            part3.attachFile(new File("E:/有多少人.mp3"));
            //设置该文件的在文件中附件名
            part3.setFileName(MimeUtility.encodeText("有多少人.mp3"));
            //把这三个附件放到  MimeMultipart 中
            parts.addBodyPart(part1);
            parts.addBodyPart(part2);
            parts.addBodyPart(part3);

            //设置要发送邮件的内容,三个附件
            msg.setContent(parts);

            msg.setFrom(new InternetAddress("wolf1437715969@163.com"));
            msg.setRecipients(RecipientType.TO,"1437715969@qq.com");

            Transport.send(msg);
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}   

这里写图片描述



这里写图片描述

多个附件发送成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值