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";
 
      // 指定发送邮件的主机为 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

使用说明:

  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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值