如何使用JavaMail发送邮件

yizhihongxing

使用JavaMail发送邮件需要以下步骤:

步骤一:添加JavaMail依赖

在项目中添加JavaMail的依赖包,例如使用Maven可以添加以下依赖:

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.6.2</version>
</dependency>

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

步骤二:设置邮件发送配置

JavaMail需要用到邮箱账号和密码进行邮件发送,因此需要设置邮件发送的配置信息,如下:

Properties props = new Properties();
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true"); // TRUE表示需要认证
props.put("mail.smtp.starttls.enable", "true"); // 开启SSL加密
props.put("mail.transport.protocol", "smtp");

其中,mail.smtp.host 表示SMTP主机地址,这里以QQ邮箱为例;mail.smtp.port表示SMTP端口,QQ邮箱的SMTP端口为587; mail.smtp.auth表示是否需要认证,需要设置为truemail.smtp.starttls.enable表示启用SSL加密,需要启用。

步骤三:创建Session对象

Session对象代表邮件会话,需要指定邮箱账号和密码进行认证,如下:

Session session = Session.getInstance(props, new Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("your_email@qq.com", "your_password");
    }
});

这里将邮箱账号和密码传入PasswordAuthentication对象中,通过Authenticator进行认证,创建Session会话对象。

步骤四:创建邮件

创建邮件需要设置收件人、发件人、主题、内容,还可以设置附件等信息,如下:

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("your_email@qq.com"));
message.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient_email@example.com"));
message.setSubject("Test Email");

// 设置邮件正文
message.setContent("<h1>Hello JavaMail</h1>", "text/html;charset=utf-8");

这里创建了一个MimeMessage对象,设置发件人、收件人、主题以及邮件正文内容。

步骤五:发送邮件

构建好邮件之后,调用Transport类的send方法发送邮件:

Transport.send(message);

至此,就完成了JavaMail发送邮件的过程。以下是一个完整的代码示例:

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

public class SendEmail {

    public static void main(String[] args) throws MessagingException {
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.transport.protocol", "smtp");

        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@qq.com", "your_password");
            }
        });

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("your_email@qq.com"));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient_email@example.com"));
        message.setSubject("Test Email");

        // 设置邮件正文
        message.setContent("<h1>Hello JavaMail</h1>", "text/html;charset=utf-8");

        // 发送邮件
        Transport.send(message);
    }
}

这个示例演示了如何使用QQ邮箱发送邮件。需要把代码中的"your_email@qq.com""your_password"替换成自己的邮箱账号和密码,把"recipient_email@example.com"替换成收件人的邮箱地址。邮件正文可以自己修改,这里只是一个简单的示例。发送邮件之后,可以登录QQ邮箱查看是否收到了邮件。

以下是另外一个示例,演示如何在邮件中添加附件:

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;

public class SendEmailWithAttachment {

    public static void main(String[] args) throws MessagingException {

        //邮箱配置
        final Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "587");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.transport.protocol", "smtp");

        //邮箱认证
        Session session = Session.getDefaultInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("your_email@qq.com", "your_password");
            }
        });

        //邮件内容
        MimeMessage mimeMessage = new MimeMessage(session);
        mimeMessage.setFrom(new InternetAddress("your_email@qq.com"));
        mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("recipient_email@example.com"));
        mimeMessage.setSubject("Email with attachment");

        //邮件正文
        MimeBodyPart mimeBodyPart = new MimeBodyPart();
        mimeBodyPart.setContent("This is the content of the email with attachment", "text/plain");

        //附件
        MimeBodyPart mimeAttachment = new MimeBodyPart();
        DataSource source = new FileDataSource("file_path");    //文件路径
        mimeAttachment.setDataHandler(new DataHandler(source));
        mimeAttachment.setFileName("file_name");    //文件名称

        //构建邮件内容
        MimeMultipart mimeMultipart = new MimeMultipart();
        mimeMultipart.addBodyPart(mimeBodyPart);    //添加正文
        mimeMultipart.addBodyPart(mimeAttachment);  //添加附件

        //设置邮件内容
        mimeMessage.setContent(mimeMultipart);

        //发送邮件
        Transport.send(mimeMessage);
    }
}

这个示例演示了如何在邮件中添加附件,需要修改代码中的"your_email@qq.com""your_password"为自己的邮箱账号和密码,把"recipient_email@example.com"替换成收件人的邮箱地址,把"file_path"替换成需要添加的附件的文件路径,把"file_name"替换成自定义的文件名。发送完之后,可以登录邮箱查看是否成功发送了包含附件的邮件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用JavaMail发送邮件 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Spring Kafka中如何通过参数配置解决超时问题详解

    下面我将为您详细讲解“Spring Kafka中如何通过参数配置解决超时问题”的攻略。 背景 在使用Spring Kafka时,如果遇到消费者无法及时消费Kafka消息而导致超时的问题,我们可以通过进行参数配置的方式来解决这个问题。 解决方案 下面是两条示例,以说明如何通过参数配置来解决超时问题: (1)示例一:通过consumer.timeout.ms来解…

    Java 2023年5月20日
    00
  • java实现微信小程序登录态维护的示例代码

    为了方便描述,本次攻略将会分为以下四个部分进行讲解: 微信小程序登录流程 前端获取微信小程序登录态并传递给后端 后端维护微信小程序登录态 示例代码说明 下面将逐一进行讲解。 1. 微信小程序登录流程 用户授权:用户通过微信小程序点击登录按钮,小程序调用wx.login()方法获取临时登录凭证code,并在回调函数中将code传递给小程序前端。 前端获取登录态…

    Java 2023年5月23日
    00
  • Spring Data JPA框架的Repository自定义实现详解

    Spring Data JPA是Spring框架中用于简化JPA的使用的框架,其底层依赖了Hibernate。而Spring Data JPA框架的Repository接口提供了许多内置的方法来完成数据访问的功能,但如果需要执行一些特殊的查询操作,我们需要自定义Repository实现。下面我们详细介绍如何自定义Repository实现。 1. 创建自定义R…

    Java 2023年5月20日
    00
  • 20个非常实用的Java程序代码片段

    以下是“20个非常实用的Java程序代码片段”的完整攻略: 1. 倒序输出字符串 可以使用StringBuilder的reverse()方法,将字符串倒序输出: String str = "hello world"; String reversedStr = new StringBuilder(str).reverse().toStrin…

    Java 2023年5月19日
    00
  • Java多线程实现第三方数据同步

    针对Java多线程实现第三方数据同步的完整攻略,我将按照以下步骤详细讲解。 1. 确定同步数据源和目标数据源 在进行数据同步的时候,首先需要明确需要同步的数据源和目标数据源。一方面,需要分析和确定需要同步的数据的格式和结构,即需要同步哪些表、哪些字段等;另一方面,还需要根据业务需求和实际情况,选择适当的方式进行数据同步,比如实时同步、定时同步、增量同步等。 …

    Java 2023年5月19日
    00
  • Java常用字符串方法小结

    Java常用字符串方法小结 字符串是Java中常用的数据类型之一,处理字符串的方法也是很多的。在本文中,笔者将会对Java中常用的字符串方法进行小结和总结,供读者参考。 获取字符串长度 获取字符串长度是常见的字符串操作。在Java中,可以调用length()方法获取字符串的长度。 示例代码: String str = "hello world!&q…

    Java 2023年5月26日
    00
  • httpclient重定向之后获取网址信息示例

    理解题意:本文旨在介绍如何利用 HttpClient 在网页发生重定向后获取最终网址信息的方法。本文将会提供两个示例帮助理解这个过程。 使用 HttpClient 获取重定向后的网址信息 在 HttpClient 中,针对重定向的处理分为两种: 允许重定向,并自动地重定向到最终站点,该方式称为自动重定向。 禁止重定向,返回非重定向的响应码,并在响应消息头中提…

    Java 2023年6月15日
    00
  • Spring循环依赖的解决办法,你真的懂了吗

    Spring循环依赖是指两个或多个Bean之间相互依赖导致Bean的初始化出现死循环的情况。这种情况下,Spring无法完成Bean的初始化,进而导致程序无法启动。在开发过程中,循环依赖是比较常见的问题。下面是解决Spring循环依赖问题的完整攻略。 1.问题描述 Bean A和Bean B相互依赖,Bean A依赖于Bean B,同时Bean B依赖于Be…

    Java 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部