当前位置: 首页 > backend >正文

groovy:java 发送一封带有附件的邮件

参阅:菜鸟教程: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";// 指定发送邮件的主机为 localhostString 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() {@Overrideprotected 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

使用说明:

  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
  2. 常见邮箱SMTP配置

    邮箱服务商SMTP服务器端口加密方式
    163邮箱smtp.163.com465/587SSL/TLS
    QQ邮箱smtp.qq.com465SSL
    Gmailsmtp.gmail.com587TLS
  3. 启用邮箱SMTP服务

    • 163/QQ邮箱:需在网页版邮箱设置中开启SMTP服务并获取授权码
    • Gmail:需在账户设置中启用"不够安全的应用"或使用OAuth2

错误排查:

  1. 认证失败:检查用户名/密码(授权码)是否正确,是否开启SMTP服务
  2. 连接超时:检查网络是否可访问SMTP服务器,尝试关闭防火墙
  3. 附件路径错误:确保文件存在且路径使用正斜杠(/)
  4. 端口问题:尝试切换465/587端口,或调整加密方式(props.put("mail.smtp.ssl.enable", "true")

注意:程序运行时需要网络连接,且附件大小受邮箱服务商限制(通常不超过20MB)。

http://www.xdnf.cn/news/12757.html

相关文章:

  • 利用qcustomplot绘制曲线图
  • audio-ovrlipsync-viseme-reference 口型同步 唇形同步 插件
  • Linux系统 - 线程 -6- 线程安全函数和可重入函数
  • Qt的学习(一)
  • Hash类型
  • 题海拾贝:P1091 [NOIP 2004 提高组] 合唱队形
  • WSF07N10 MOSFET 在铲皮机中的应用
  • WebFuture 系统升级提示外键约束的问题处理
  • 【判断既约分数】2022-4-3
  • 图卷积网络:从理论到实践
  • NumPy数组创建
  • C++11新增重要标准(下)
  • mysql 主从复制和分库分表
  • 2000-2020年各省第一产业增加值占GDP比重数据
  • python打卡day47@浙大疏锦行
  • 20250607在荣品的PRO-RK3566开发板的Android13的uboot中使用gpio命令来配置GPIO的状态
  • JavaScript篇:字母侦探:如何快速统计字符串里谁才是‘主角‘?
  • 开疆智能Ethernet/IP转Modbus网关连接施耐德ATV320变频器配置案例
  • 添加禁用状态
  • 【LeetCode】3170. 删除星号以后字典序最小的字符串(贪心 | 优先队列)
  • 开疆智能Ethernet/IP转Modbus网关连接质量流量计配置案例
  • 力扣刷题(第五十天)
  • 海伯森超高速工业相机:超高帧率,工业视觉新 “视” 力
  • Linux(生产消费者模型/线程池)
  • 一类简单而特殊数列的通项公式求法
  • 16-Oracle 23 ai-JSON-Relational Duality-知识准备
  • 靶场(二十)---靶场体会小白心得 ---jacko
  • Docker安装MQEX
  • MobaXterm配置跳转登录堡垒机
  • 详解二叉树遍历的非递归实现