利用程式發郵件—解決報錯 java.io.FileNotFoundException: jdk1.6.0_21\jre\lib\javamail.providers (系統找不到指定的檔案。)
阿新 • • 發佈:2018-12-12
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
最後的成功傳送截圖