利用程序发邮件—解决报错 java.io.FileNotFoundException: jdk1.6.0_21\jre\lib\javamail.providers (系统找不到指定的文件。)

参考:https://blog.csdn.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();
		}
	}

}

注意事项:

  1. 设置的邮件服务器host必须是发送邮箱的服务器,与接收邮箱无关。
  2. 发送邮件的邮箱必须在设置页面开启stmp服务并设置授权码
  3. 上图中的,发送邮箱的密码不是你注册时的密码,而是授权码!!!切记!
  4. 设置方式,看下图(以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

最后的成功发送截图

猜你喜欢

转载自blog.csdn.net/Grace_1203/article/details/82881783