利用程序发邮件—解决报错 java.io.FileNotFoundException: jdk1.6.0_21\jre\lib\javamail.providers (系统找不到指定的文件。)
参考:https://blog.****.net/u010218226/article/details/53114595
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Demo1
{
/**
* @author artcool
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
try
{
// 配置环境
Properties pros = new Properties();
// pros.setProperty("mail.debug", "");//调试模式
pros.setProperty("mail.smtp.auth", "true");
pros.setProperty("mail.transport.protocol", "smtp");
Session session = Session.getDefaultInstance(pros);
session.setDebug(true);
// 邮件内容
Message msg = new MimeMessage(session);
msg.setText("hello");
msg.setFrom(new InternetAddress("[email protected]"));
Transport transport = session.getTransport();
// 连接服务器所要用到的参数:主机名、端口号、用户名、密码
transport.connect("smtp.163.com", 25, "[email protected]","授权密码");
transport.sendMessage(msg, new Address[]
{
new InternetAddress("[email protected]")
});
// transport.send(msg,new Address[]{new
// InternetAddress("[email protected]")});
transport.close();
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意事项:
- 设置的邮件服务器host必须是发送邮箱的服务器,与接收邮箱无关。
- 发送邮件的邮箱必须在设置页面开启stmp服务并设置授权码
- 上图中的,发送邮箱的密码不是你注册时的密码,而是授权码!!!切记!
- 设置方式,看下图(以163邮箱为例)
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.ArrayList;
import java.util.Properties;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class TestSendMail
{
public static void main(String[] args)
{
//(1)设置邮件服务器
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", "smtp");
properties.setProperty("mail.smtp.auth", "true");
// properties.setProperty("mail.debug", "true");//最好不要加上,因为会报错。加上也没有问题。因为不影响后面的发送
/*当加上了上面这句话properties.setProperty("mail.debug", "true");的时候,在执行getDefaultInstance(session)的时候会报错。
* DEBUG: JavaMail version 1.4ea
*DEBUG: java.io.FileNotFoundException: C:\DigiWin PLM\Server\jdk1.6.0_21\jre\lib\javamail.providers (系统找不到指定的文件。)
*DEBUG: !anyLoaded
*DEBUG: not loading resource: /META-INF/javamail.providers
*DEBUG: successfully loaded resource: /META-INF/javamail.default.providers
*DEBUG: Tables of loaded providers
*DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}
*DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}
*DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map
*DEBUG: !anyLoaded
*DEBUG: not loading resource: /META-INF/javamail.address.map
*DEBUG: java.io.FileNotFoundException: C:\DigiWin PLM\Server\jdk1.6.0_21\jre\lib\javamail.address.map (系统找不到指定的文件。)
**/
//(2)拿到本次会话,下面开始发送邮件
Session session = Session.getDefaultInstance(properties);
// Session session = Session.getInstance(properties);
session.setDebug(true);
//(3)创建空的邮件
MimeMessage mailMessage = new MimeMessage(session);
try
{
//1——设置邮件的发送方From
mailMessage.setFrom(new InternetAddress("[email protected]"));
//2——设置邮件的主题Subject
mailMessage.setSubject("TestMailSubject");
//3——设置邮件的内容Content——这里的内容格式不是字符串
//MimeMessage.setContent(Multipart arg0)
//总
MimeMultipart allPart=new MimeMultipart("mixed");
List<String> fileList=new ArrayList<String>();
//附件的地址
String fileName1="QQ20180918095315.jpg";
String filePath1="F:\\QQ20180918095315.jpg";
String fileName2="1——错误原因与解决方案.txt";
String filePath2="F:\\1——错误原因与解决方案.txt";
fileList.add(fileName1+"!O!"+filePath1);
fileList.add(fileName2+"!O!"+filePath2);
//--attachmentPart
for(String fileInfo :fileList)
{
String str[]=fileInfo.split("!O!");
String fileName=str[0];
String filePath=str[1];
MimeBodyPart attachmentPart =new MimeBodyPart();//用于装载邮件附件
FileDataSource fds=new FileDataSource(filePath);//从文件的绝对路径处获取数据源
attachmentPart.setDataHandler(new DataHandler(fds));
attachmentPart.setFileName(MimeUtility.encodeText(fileName));
// attachmentPart.setFileName(fileName);
//对于名称有影响,与文件中的内容无关。当然英文没有任何问题,中文的文件名称有问题,出现乱码
allPart.addBodyPart(attachmentPart);
}
//--bodyPart
MimeBodyPart bodyPart=new MimeBodyPart();
bodyPart.setText("hahaha,I am TestMailContent");
//将body放在“总”里面
allPart.addBodyPart(bodyPart);
//将“总”放在邮件里面
mailMessage.setContent(allPart);
//4——设置接收方地址
mailMessage.setRecipient(RecipientType.TO, new InternetAddress("[email protected]"));
Transport trans=session.getTransport();
// 连接服务器所要用到的参数:主机名、端口号、用户名、密码(授权密码与邮箱密码不一样)
trans.connect("smtp.163.com", 25, "[email protected]","xxx");
//发送邮件--trans.connect("发送方邮箱账号", "发送方邮箱密码")
// trans.connect("[email protected]", "xxx");
//5--向接收方发送邮件
trans.sendMessage(mailMessage, mailMessage.getAllRecipients());
}
catch (AddressException e)
{
System.out.println("cuo");
e.printStackTrace();
}
catch (MessagingException e)
{
System.out.println("cuole");
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
System.out.println("cuole2");
e.printStackTrace();
}
}
}
有两个架包或者是一个架包需要加
mail.jar
最后的成功发送截图