使用JavaMail发送邮件时出现IO异常(访问被拒绝)

使用JavaMail发送邮件时出现IO异常(访问被拒绝),java,jakarta-mail,Java,Jakarta Mail,我试图使用JavaMail发送邮件,但收到IO异常说访问被拒绝 请告诉我哪里出了错。我使用了java邮件和internet API以及数据源datahandler API。另外,我试图作为附件发送的html文件位于适当的路径中,我拥有该文件的访问权限。下面是我的代码 import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; imp

我试图使用JavaMail发送邮件,但收到IO异常访问被拒绝 请告诉我哪里出了错。我使用了java邮件和internet API以及数据源datahandler API。另外,我试图作为附件发送的html文件位于适当的路径中,我拥有该文件的访问权限。下面是我的代码

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class SendMail

{

public static void execute(String reportFileName) throws Exception

{
    String path="C:/reports";

    String[] to={"xyz@gmail.com"};
    String[] cc={"xyz@gmail.com"};
    String[] bcc={"abc@gmail.com"};

    SendMail.sendMail("xyz@gmail.com",
                        "******",
                        "smtp.gmail.com",
                        "465",
                        "true",
                        "true",
                         true,
                        "javax.net.ssl.SSLSocketFactory",
                        "false",
                         to,
                         cc,
                         bcc,
                        "Test Mail",
                        "Test Message",
                        path,
                        reportFileName);
  }

  public  static boolean sendMail(String userName,
            String passWord,
            String host,
            String port,
            String starttls,
            String auth,
            boolean debug,
            String socketFactoryClass,
            String fallback,
            String[] to,
            String[] cc,
            String[] bcc,
            String subject,
            String text,
            String attachmentPath,
            String attachmentName){

    //Object Instantiation of a properties file.
    Properties props = new Properties();

    props.put("mail.smtp.user", userName);

    props.put("mail.smtp.host", host);

    props.put("mail.smtp.password", passWord);

    props.put("mail.smtps.auth", "true");



    if(!"".equals(port)){
    props.put("mail.smtp.port", port);
    }

    if(!"".equals(starttls)){
        props.put("mail.smtp.starttls.enable",starttls);
        props.put("mail.smtp.auth", auth);
    }

    if(debug){

    props.put("mail.smtp.debug", "true");

    }else{

    props.put("mail.smtp.debug", "false");

    }

    if(!"".equals(port)){
        props.put("mail.smtp.socketFactory.port", port);
    }
    if(!"".equals(socketFactoryClass)){
        props.put("mail.smtp.socketFactory.class",socketFactoryClass);
    }
    if(!"".equals(fallback)){
        props.put("mail.smtp.socketFactory.fallback", fallback);
    }

    try{
         props.put("mail.smtp.isSSL", "true");

        Session session = Session.getDefaultInstance(props, null);

        session.setDebug(debug);

        MimeMessage msg = new MimeMessage(session);

        msg.setText(text);

        msg.setSubject(subject);

        Multipart multipart = new MimeMultipart();
        MimeBodyPart messageBodyPart = new MimeBodyPart();
        DataSource source = new FileDataSource(attachmentPath);
        messageBodyPart.setDataHandler(new DataHandler(source));
        messageBodyPart.setFileName(attachmentName);
        multipart.addBodyPart(messageBodyPart);

        msg.setContent(multipart);
        msg.setFrom(new InternetAddress(userName));

        for(int i=0;i<to.length;i++){
            msg.addRecipient(Message.RecipientType.TO, new

      InternetAddress(to[i]));
        }

        for(int i=0;i<cc.length;i++){
            msg.addRecipient(Message.RecipientType.CC, new
       InternetAddress(cc[i]));
        }

        for(int i=0;i<bcc.length;i++){
            msg.addRecipient(Message.RecipientType.BCC, new
      InternetAddress(bcc[i]));
        }

        msg.saveChanges();

        Transport transport = session.getTransport("smtps");

        transport.connect("smtp.gmail.com","xyz@gmail.com", "******");

        transport.sendMessage(msg, msg.getAllRecipients());

        transport.close();

        return true;

    } catch (Exception mex){
        mex.printStackTrace();
        return false;
    }
}

  public static void main (String []args) throws Exception
  {
      SendMail.execute("dummy_report.html");
  }
}
import javax.activation.DataHandler;
导入javax.activation.DataSource;
导入javax.activation.FileDataSource;
导入javax.mail.*;
导入javax.mail.internet.*;
导入java.util.*;
公共类SendMail
{
公共静态void execute(String reportFileName)引发异常
{
String path=“C:/reports”;
字符串[]到={”xyz@gmail.com"};
字符串[]cc={”xyz@gmail.com"};
字符串[]bcc={”abc@gmail.com"};
SendMail.SendMail(“xyz@gmail.com",
"******",
“smtp.gmail.com”,
"465",
“真的”,
“真的”,
是的,
“javax.net.ssl.SSLSocketFactory”,
“假”,
到
复写的副本,
密件抄送,
“测试邮件”,
“测试消息”,
路径
报告文件名);
}
公共静态布尔sendMail(字符串用户名,
字符串密码,
字符串主机,
字符串端口,
字符串starttls,
字符串验证,
布尔调试,
字符串socketFactoryClass,
字符串回退,
字符串[]到,
字符串[]cc,
字符串[]密件抄送,
字符串主题,
字符串文本,
字符串附件路径,
字符串(attachmentName){
//属性文件的对象实例化。
Properties props=新属性();
props.put(“mail.smtp.user”,用户名);
props.put(“mail.smtp.host”,host);
props.put(“mail.smtp.password”,password);
props.put(“mail.smtps.auth”、“true”);
如果(!“”.equals(端口)){
props.put(“mail.smtp.port”,port);
}
如果(!“”.equals(starttls)){
props.put(“mail.smtp.starttls.enable”,starttls);
put(“mail.smtp.auth”,auth);
}
如果(调试){
props.put(“mail.smtp.debug”,“true”);
}否则{
props.put(“mail.smtp.debug”,“false”);
}
如果(!“”.equals(端口)){
props.put(“mail.smtp.socketFactory.port”,port);
}
如果(!“”.equals(socketFactoryClass)){
props.put(“mail.smtp.socketFactory.class”,socketFactoryClass);
}
如果(!“”.equals(回退)){
props.put(“mail.smtp.socketFactory.fallback”,fallback);
}
试一试{
props.put(“mail.smtp.isSSL”,“true”);
Session Session=Session.getDefaultInstance(props,null);
setDebug(debug);
MimeMessage msg=新MimeMessage(会话);
msg.setText(文本);
msg.setSubject(主题);
Multipart Multipart=新的MimeMultipart();
MimeBodyPart messageBodyPart=新的MimeBodyPart();
DataSource source=新文件数据源(attachmentPath);
setDataHandler(新的DataHandler(源));
messageBodyPart.setFileName(attachmentName);
multipart.addBodyPart(messageBodyPart);
msg.setContent(多部分);
msg.setFrom(新的Internet地址(用户名));

对于(int i=0;i,FileDataSource只指向目录,而不是文件。attachmentName似乎应该在attachmentPath命名的目录中命名文件。请尝试以下操作:

File att = new File(new File(attachmentPath), attachmentName);
messageBodyPart.attachFile(att);

FileDataSource只指向目录,而不是文件。看起来attachmentName应该在attachmentPath命名的目录中命名文件。请尝试以下操作:

File att = new File(new File(attachmentPath), attachmentName);
messageBodyPart.attachFile(att);