SMTP(简单邮件传输协议)是用于发送电子邮件的标准协议。在Java中,可以使用JavaMail API来调用SMTP协议实现邮件发送功能,方便地在应用程序中集成邮件发送模块,如用于发送注册确认邮件、密码重置邮件等场景。
需要一个能收发邮件的邮箱帐号,常见的QQ邮箱、163邮箱等都支持SMTP服务。在邮箱设置中找到开启SMTP服务的选项并开启,部分邮箱开启后会生成授权码,后续代码中需使用授权码代替邮箱密码进行登录认证。
如果使用Maven项目,可在pom.xml
中添加JavaMail相关依赖:
<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>
通过Properties
对象设置连接邮件服务器的相关参数。主要参数包括:
mail.transport.protocol
:指定使用的协议为smtp
。mail.smtp.host
:设置SMTP服务器地址,如QQ邮箱的smtp.qq.com
,163邮箱的smtp.163.com
。mail.smtp.port
:设置端口号,非SSL连接一般默认为25,SSL连接下QQ邮箱常用465或587,163邮箱常用465。mail.smtp.auth
:设置是否需要用户认证,值为true
表示需要认证。mail.smtp.socketFactory.class
为javax.net.ssl.SSLSocketFactory
等相关参数。根据上述配置创建Session
对象,用于和邮件服务器交互。可以通过Session.getInstance(props, authenticator)
方法创建,其中props
是前面设置的参数对象,authenticator
是用于身份验证的对象,可传入邮箱用户名和密码(或授权码)进行认证。
使用MimeMessage
类创建邮件对象,并设置邮件的相关信息,如发件人、收件人、主题、内容等。例如:
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(senderEmail));// 设置发件人邮箱
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(receiverEmail));// 设置收件人邮箱
message.setSubject(subject);// 设置邮件主题
message.setText(content);// 设置邮件文本内容
通过Transport
类发送邮件。先从Session
中获取Transport
对象,然后使用transport.connect(username, password)
方法连接邮件服务器,最后调用transport.sendMessage(message, message.getAllRecipients())
发送邮件,发送完成后调用transport.close()
关闭连接。
以下是一个完整的Java发送简单文本邮件的示例代码:
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
public class MailSender {
public void sendEmail(String to, String subject, String body) {
final String username = "your_email@qq.com";// 发件人邮箱
final String password = "your_auth_code";// 邮箱授权码
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");
props.put("mail.smtp.port", "587");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
Transport.send(message);
System.out.println("Email sent successfully!");
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
MailSender sender = new MailSender();
sender.sendEmail("recipient@example.com", "测试邮件", "这是一封测试邮件内容。");
}
}
上述代码中,sendEmail
方法实现了邮件发送功能,在main
方法中调用该方法,传入收件人邮箱、邮件主题和内容,即可发送一封简单的文本邮件。
如果要发送带附件或内嵌图片的邮件,需要进一步构造Multipart
对象来处理邮件内容,将文本、附件、图片等不同部分组合到邮件中,具体可参考相关JavaMail文档和示例。
SMTP 协议,Java 调用 SMTP,SMTP 调用示例,Java 邮件开发,SMTP 使用教程,Java SMTP 示例,SMTP 协议详解,Java 发送邮件,SMTP 调用步骤,Java 邮件示例,SMTP 开发教程,Java SMTP 实现,SMTP 协议使用,Java 调用邮件协议,SMTP 示例教程
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。