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