亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java 发送邮件完整指南:从基础到进阶实战

在 Java 应用程序中发送邮件其实很简单,但首先你需要在机器上安装 JavaMail API 和 Java Activation Framework (JAF)。

环境准备

下载并解压这些文件,在新创建的顶层目录中你会找到两个应用的多个 jar 文件。你需要将 mail.jar 和 activation.jar 添加到 CLASSPATH 中。

发送简单邮件

下面是一个从本地发送简单邮件的示例。假设你的 localhost 已连接互联网并能发送邮件。

代码示例

// 文件名 SendEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {
    public static void main(String[] args) {
        // 收件人邮箱
        String to = "abcd@gmail.com";
        // 发件人邮箱
        String from = "web@gmail.com";
        // 假设从 localhost 发送
        String host = "localhost";

        // 获取系统属性
        Properties properties = System.getProperties();
        // 设置邮件服务器
        properties.setProperty("mail.smtp.host", host);
        // 获取默认 Session 对象
        Session session = Session.getDefaultInstance(properties);

        try {
            // 创建默认 MimeMessage 对象
            MimeMessage message = new MimeMessage(session);
            // 设置 From 头部字段
            message.setFrom(new InternetAddress(from));
            // 设置 To 头部字段
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            // 设置 Subject 头部字段
            message.setSubject("这是邮件主题!");
            // 设置实际消息内容
            message.setText("这是实际消息内容");
            // 发送消息
            Transport.send(message);
            System.out.println("邮件发送成功....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

编译并运行此程序发送简单邮件:

输出结果

$ java SendEmail
邮件发送成功....

如果要发送邮件给多个收件人,可使用以下方法指定多个邮箱 ID:

void addRecipients(Message.RecipientType type, Address[] addresses) throws MessagingException

参数说明:

发送 HTML 格式邮件

下面示例演示发送 HTML 邮件,同样假设 localhost 已联网。此例与前一个类似,区别在于使用 setContent() 方法设置内容,第二个参数指定为 "text/html" 以表明包含 HTML 内容。使用此方法可发送任意大小的 HTML 内容。

代码示例

// 文件名 SendHTMLEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail {
    public static void main(String[] args) {
        String to = "abcd@gmail.com";
        String from = "web@gmail.com";
        String host = "localhost";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        Session session = Session.getDefaultInstance(properties);

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("这是邮件主题!");
            // 发送实际 HTML 消息,内容可任意大
            message.setContent("<h1>这是实际消息</h1>", "text/html");
            Transport.send(message);
            System.out.println("邮件发送成功....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

编译并运行发送 HTML 邮件:

输出结果

$ java SendHTMLEmail
邮件发送成功....

发送带附件的邮件

下面示例演示发送带附件的邮件,假设 localhost 已联网。

代码示例

// 文件名 SendFileEmail.java
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail {
    public static void main(String[] args) {
        String to = "abcd@gmail.com";
        String from = "web@gmail.com";
        String host = "localhost";

        Properties properties = System.getProperties();
        properties.setProperty("mail.smtp.host", host);
        Session session = Session.getDefaultInstance(properties);

        try {
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
            message.setSubject("这是邮件主题!");

            // 创建消息部分
            BodyPart messageBodyPart = new MimeBodyPart();
            // 填充消息正文
            messageBodyPart.setText("这是消息正文");
            // 创建多部分消息
            Multipart multipart = new MimeMultipart();
            // 添加文本部分
            multipart.addBodyPart(messageBodyPart);

            // 第二部分:附件
            messageBodyPart = new MimeBodyPart();
            String filename = "file.txt";
            DataSource source = new FileDataSource(filename);
            messageBodyPart.setDataHandler(new DataHandler(source));
            messageBodyPart.setFileName(filename);
            multipart.addBodyPart(messageBodyPart);

            // 发送完整消息部分
            message.setContent(multipart);
            Transport.send(message);
            System.out.println("邮件发送成功....");
        } catch (MessagingException mex) {
            mex.printStackTrace();
        }
    }
}

编译并运行发送带附件邮件:

输出结果

$ java SendFileEmail
邮件发送成功....

用户认证配置

若邮件服务器要求提供用户 ID 和密码进行认证,可按如下方式设置属性:

props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");

其余邮件发送机制保持不变。

java

  1. 精通 Java 运算符:类型、语法与实战示例
  2. Java 注释:类型、用法与最佳实践
  3. 精通 Java 增强 for 循环:语法、示例与最佳实践
  4. 精通 Java 字符串:创建、方法与最佳实践
  5. 精通 Java 接口:概念、实现与最佳实践
  6. 精通 Java 匿名内部类:定义、语法与实战示例
  7. 精通 Java Try-With-Resources:自动资源管理详解
  8. Java 注解详解:类型、放置位置与实战示例
  9. Java 断言实战指南:尽早发现 Bug 与保障代码可靠性
  10. 深入理解 Java Vector:用法、特性及与 ArrayList 的对比
  11. Java 发送邮件完整指南:从基础到进阶实战
  12. Java 9 接口私有方法:增强封装与代码复用