Java 发送邮件


Java发送邮件

邮件是人们日常通信中必不可少的一部分,而Java语言对于发送邮件也有很好的支持。Java发送邮件分为两部分:构造邮件、连接并发送邮件。

构造邮件

构造邮件的过程是指创建一封邮件,并设置邮件的各项属性,包括发件人地址、收件人地址、主题、正文等等。

Java发送邮件可以使用JavaMail API,所需的jar包可从官网(JavaMail Reference Implementation)下载。以下是构造邮件的代码示例:

public static void main(String[] args) throws MessagingException {
        // 邮件发送者的邮箱地址和密码
        String fromEmail = "youremail@qq.com";
        String password = "password";

        // 邮件接收者的邮箱地址
        String toEmail = "recipientemail@qq.com";

        // 创建一个邮件会话
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(fromEmail, password);
                    }
                });

        // 构造邮件对象
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(fromEmail));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
        message.setSubject("Java Mail API Test");
        message.setText("这是一封由Java Mail API自动发送的邮件,如有疑问,请与发送者联系。");

        // 发送邮件
        Transport.send(message);
        System.out.println("邮件已成功发送。");
    }

上述代码通过邮箱和密码获取邮件会话,并设置了SMTP服务器的地址和端口。接下来,创建了一个邮件对象Message,使用setFrom、setRecipients、setSubject和setText方法分别设置了发件人、收件人、主题和正文。最后,使用Transport.send发送邮件。

连接并发送邮件

发送邮件前需要连接邮件服务器,以确保有发送邮件的权限和资源。JavaMail API提供了Transport类来连接并发送邮件。

以下是连接并发送邮件的代码示例:

public static void main(String[] args) throws MessagingException {
        // 邮件发送者的邮箱地址和密码
        String fromEmail = "youremail@qq.com";
        String password = "password";

        // 邮件接收者的邮箱地址
        String toEmail = "recipientemail@qq.com";

        // 创建一个邮件会话
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", "smtp.qq.com");
        props.put("mail.smtp.port", "587");

        Session session = Session.getDefaultInstance(props,
                new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(fromEmail, password);
                    }
                });

        // 构造邮件对象
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(fromEmail));
        message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail));
        message.setSubject("Java Mail API Test");
        message.setText("这是一封由Java Mail API自动发送的邮件,如有疑问,请与发送者联系。");

        // 发送邮件
        Transport transport = session.getTransport("smtp");
        transport.connect("smtp.qq.com", fromEmail, password);
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
        System.out.println("邮件已成功发送。");
    }

上述代码在构造邮件对象之后,使用session.getTransport方法连接了邮件服务器,并通过transport.connect方法提供的SMTP服务器的地址和账户信息进行验证,并最终使用transport.sendMessage方法发送了邮件。

总结

通过使用JavaMail API来发送邮件,能够快速地构造和发送邮件。使用API的好处在于,可以根据需要自定义邮件的各项属性,同时灵活地连接并发送邮件。另外,使用JavaMail API可以保证自动发送系统的高可用性,从而提高邮件的发送成功率。