Java中发送邮件

本文介绍如何使用JavaMail库通过SMTP协议创建并发送电子邮件。通过Java代码实现邮件发送功能,在网站注册、找回密码等场景中非常实用。

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

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

1. 电子邮件协议

电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。

2. JavaMail

我们平时通过 Java 代码打开一个 http 网页链接时,通常可以使用已经对 http 协议封装好的 HttpURLConnection 类来快速地实现。Java 官方也提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去官方下载,这里我从 JavaEE 官方的 Github 仓库下载。

JavaMail 下载地址:https://github.com/javaee/javamail/releases

特别注意:

本测试用例用的 JavaMail 版本是 1.6.0,如果下载到其他版本的 JavaMail 运行时出现问题,请使用JavaMail 1.6.0版本再进行尝试。

使用JavaMail 1.6.0要求的 JDK 版本必须是JDK 1.7 以上(建议使用最新版 JDK)。

不要直接就完完全全复制我的代码,需要修改一下发送的标题、内容、用户昵称,要不然所有人都直接复制我的代码发送,内容一致,邮箱服务器就可能会检测到这些内容是垃圾广告内容,不让你发送,会返回错误码,查询错误码也能查询到失败原因。

package com.companyserver.service.impl;

@Service

public class EmailServiceImpl implements EmailService {

@Value("${mail.username}")

private StringMAIL_USERNAME;

@Value("${mail.from}")

private StringMAIL_FROM;

@Value("${mail.password}")

private StringMAIL_PASSWORD;

@Value("${mail.host}")

private StringMAIL_HOST;

@Value("${mail.port}")

private StringMAIL_PORT;

//设置配置条件

private Properties generateProperties() {

     Properties properties = System.getProperties();//系统配置

      properties.put("mail.smtp.host",MAIL_HOST);//邮件服务器

       properties.put("mail.smtp.port",MAIL_PORT);//邮件服务器端口

       properties.put("mail.smtp.auth","true");

        properties.put("mail.transport.protocol","smtp");//发送方式

         return properties;

   }

private Session getSession() {

Properties props =this.generateProperties();

Session session = Session.getInstance(props, new javax.mail.Authenticator() {

      protected PasswordAuthentication getPasswordAuthentication() {

              return new PasswordAuthentication(MAIL_USERNAME, MAIL_PASSWORD);

          }

     });

     return session;

   }

//发送网页消息

@Override

public voidsendHtml(String to,String subject,String body)throwsMessagingException {

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);//设置邮件发送的端口


//发送简单的文本消息可以这样

//message.setText(body);

//Transport.send(message);


//MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart =newMimeMultipart();

MimeBodyPart messageBodyPart =newMimeBodyPart();//创建一个包含附件内容的MimeBodyPart

//设置HTML内容

messageBodyPart.setContent(body,"text/html; charset=utf-8");

mainPart.addBodyPart(messageBodyPart);

message.setContent(mainPart);

Transport.send(message);

    }

@Override

public voidsendMessage(String to,String subject,String body)throwsMessagingException{

Session session = getSession();

Message message =newMimeMessage(session);

message.setFrom(newInternetAddress(MAIL_FROM));

message.setRecipient(Message.RecipientType.TO, newInternetAddress(to));

message.setSentDate(newDate());//设置邮件消息发送的时间

message.setSubject(subject);

message.setText(body);

Transport.send(message);

     }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lpfasd123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值