首先要知道一点,发送邮件不需要像发送短信那样购买具体的定制化服务,可以理解为发送短信是一个涉及到具体的物理设备,比如基站等这些东西,而邮件的服务成本没有那么高,它是一个比较纯粹的软件服务。
其次你要知道那个邮件服务给你提供了外部调用的SMTP服务
,个人写代码一般最好用的是网易邮箱,下面同样用网易邮箱来演示如何发送邮件。
首先登录网易邮箱,在设置中,打开SMTP服务
。
网易的相关服务有两个开关,开启一个就行,需要的只是SMTP发邮件的能力
开启后会有新手引导设置认证秘钥,你要保存好,秘钥只在设置的时候显示一次。
随后记住网易邮箱的SMTP服务器地址和端口号,这个信息可以在网易邮箱的帮助中心查询STMP找到
到此需要的信息就准备完毕了,下面就是写一个发邮箱的代码,Java提供了javax.mail.*
包,让我们发送邮件。
package com.wy.utils;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
/**
* 作者: wangyang <br/>
* 创建时间: 2023/5/25 <br/>
* 描述: <br/>
* EmailUtil 邮件工具类
*/
public class EmailUtil {
/**
* 描述: 发送邮件的工具类 <br/>
* 作者: wangyang <br/>
* 创建时间: 2023/5/25 <br/>
* 参数: from-发件人邮箱地址、instruction-发件人的smtp授权指令、to-收件人邮箱地址、smtpAddress-smtp服务器地址
* smtpPort-smtp服务器端口号 、smtpSSL-stmp是否采用SSL认证 、subject-发生的内容标题、text-发送的内容正文<br/>
* 返回值: <br/>
*/
public static void sendEmail(String from,String instruction,
String to,String smtpAddress,
String smtpPort,Boolean smtpSSL,
String subject,String text) throws MessagingException {
// 设置SMTP服务器地址和端口号
Properties props = new Properties();
props.put("mail.smtp.host", smtpAddress);
props.put("mail.smtp.port", smtpPort);
if (smtpSSL){
props.put("mail.smtp.auth","true");
props.put("mail.smtp.ssl.enable","true");
}
// 创建Session对象
Session session = Session.getInstance(props);
// 创建MimeMessage对象
MimeMessage message = new MimeMessage(session);
// 设置发件人、收件人、主题和正文
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
message.setContent(text,"text/html;charset=utf-8");
//代码发送邮件最常用的是html内容,如果只是发送纯粹的文字可以直接使用message.setText(text);
// 发送邮件
Transport transport = session.getTransport("smtp");
transport.connect(smtpAddress, from, instruction);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
public static void main(String[] args) throws MessagingException {
EmailUtil.sendEmail("111111111@163.com","1111111111",
"111111111","smtp.163.com","465",true,
"测试","<span style='color:red'>测试</span>");
}
}
这就是全部的流程。
最后要提一点,网易邮箱使用STMP服务的时候只需要认证秘钥,不需要你的邮箱密码,但不是所有邮箱提供的STMP服务都是这样,如果你使用的邮箱需要账号密码,就使用下面的代码。
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendHtmlEmail {
public static void main(String[] args) {
// 设置邮件服务器的属性
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.example.com"); // 邮件服务器地址
properties.put("mail.smtp.port", "587"); // 邮件服务器端口号
properties.put("mail.smtp.auth", "true"); // 需要身份验证
properties.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
// 设置发送者和接收者的邮箱地址
String senderEmail = "sender@example.com";
String receiverEmail = "receiver@example.com";
// 设置邮件发送者的用户名和密码
final String username = "your_username";
final String password = "your_password";
// 创建会话
Session session = Session.getInstance(properties, new javax.mail.Authenticator() {
protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
return new javax.mail.PasswordAuthentication(username, password);
}
});
try {
// 创建邮件对象
Message message = new MimeMessage(session);
// 设置发送者和接收者
message.setFrom(new InternetAddress(senderEmail));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiverEmail));
// 设置邮件主题
message.setSubject("HTML邮件示例");
// 设置邮件内容为HTML格式
String htmlContent = "<h1>Hello, World!</h1><p>This is a sample HTML email.</p>";
message.setContent(htmlContent, "text/html");
// 发送邮件
Transport.send(message);
System.out.println("邮件已发送。");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}