参阅:菜鸟教程:Java 发送邮件
从 https://gitcode.com/open-source-toolkit/d6296/
下载 javax.mail-1.6.2.jar
本机找到 D:\groovy-2.5.6\lib\extras-jaxb\activation-1.1.1.jar
你可以上网下载 activation-1.1.1.jar
copy javax.mail-1.6.2.jar , activation-1.1.1.jar to D:\groovy-4.0.6\lib\
编写 SendFileEmail.groovy 如下
// 文件名 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 = "recipient@163.com";
// 发件人电子邮箱
String from = "me@163.com";
// 指定发送邮件的主机为 localhost
String host = "localhost";
// 获取系统属性
Properties properties = System.getProperties();
// 设置邮件服务器
properties.setProperty("smtp.163.com", host);
// 获取默认的 Session 对象。
Session session = Session.getDefaultInstance(properties);
try{
// 创建默认的 MimeMessage 对象。
MimeMessage message = new MimeMessage(session);
// Set From: 头部头字段
message.setFrom(new InternetAddress(from));
// Set To: 头部头字段
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: 头字段
message.setSubject("This is the Subject Line!");
// 创建消息部分
BodyPart messageBodyPart = new MimeBodyPart();
// 消息
messageBodyPart.setText("This is message body");
// 创建多重消息
Multipart multipart = new MimeMultipart();
// 设置文本消息部分
multipart.addBodyPart(messageBodyPart);
// 附件部分
messageBodyPart = new MimeBodyPart();
String filepath = "D:/test/attach_file.txt"; // 必须是绝对路径
String filename = "attach_file.txt";
DataSource source = new FileDataSource(filepath);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
// 发送完整消息
message.setContent(multipart );
// 发送消息
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
运行 groovy SendFileEmail
以下是使用JavaMail发送带附件邮件的完整程序。请确保已添加JavaMail库依赖(如使用Maven,添加以下依赖):
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Java程序代码:
// SendEmail_1.goovy
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class EmailWithAttachment {
public static void main(String[] args) {
// 邮件配置信息(请替换为实际值)
String host = "smtp.example.com"; // SMTP服务器地址
String port = "587"; // SMTP端口(常用:587或465)
String username = "your@email.com"; // 发件邮箱
String password = "yourpassword"; // 邮箱密码/授权码
String toEmail = "recipient@example.com"; // 收件邮箱
// 邮件内容
String subject = "测试带附件的邮件";
String bodyText = "这是一封包含附件的测试邮件,请查收附件!";
// 附件路径(绝对路径)
String attachmentPath = "C:/path/to/your/file.pdf"; // 替换为实际文件路径
// 设置邮件属性
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true"); // 启用TLS加密
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
// 创建Session对象
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// 创建MimeMessage对象
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipient(Message.RecipientType.TO, new InternetAddress(toEmail));
message.setSubject(subject);
// 创建邮件正文部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText(bodyText);
// 创建邮件附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
DataSource source = new FileDataSource(attachmentPath);
attachmentPart.setDataHandler(new DataHandler(source));
attachmentPart.setFileName(source.getName()); // 设置附件文件名
// 组合邮件内容
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(attachmentPart);
// 设置邮件内容
message.setContent(multipart);
// 发送邮件
Transport.send(message);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
System.err.println("邮件发送失败: " + e.getMessage());
e.printStackTrace();
}
}
}
运行 groovy SendEmail_1
使用说明:
-
替换配置信息:
host
:您的SMTP服务器地址(如:smtp.163.com, smtp.qq.com)port
:SMTP端口(TLS加密常用587,SSL加密常用465)username
:完整的发件邮箱地址password
:邮箱密码或授权码(QQ/163等需使用授权码)toEmail
:收件人邮箱地址attachmentPath
:附件的本地绝对路径(如:D:/reports/monthly.pdf
)
-
常见邮箱SMTP配置:
邮箱服务商 SMTP服务器 端口 加密方式 163邮箱 smtp.163.com 465/587 SSL/TLS QQ邮箱 smtp.qq.com 465 SSL Gmail smtp.gmail.com 587 TLS -
启用邮箱SMTP服务:
- 163/QQ邮箱:需在网页版邮箱设置中开启SMTP服务并获取授权码
- Gmail:需在账户设置中启用"不够安全的应用"或使用OAuth2
错误排查:
- 认证失败:检查用户名/密码(授权码)是否正确,是否开启SMTP服务
- 连接超时:检查网络是否可访问SMTP服务器,尝试关闭防火墙
- 附件路径错误:确保文件存在且路径使用正斜杠(
/
) - 端口问题:尝试切换465/587端口,或调整加密方式(
props.put("mail.smtp.ssl.enable", "true")
)
注意:程序运行时需要网络连接,且附件大小受邮箱服务商限制(通常不超过20MB)。