国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java使用JavaMail API發(fā)送和接收郵件的代碼示例

2019-11-26 14:11:02
字體:
供稿:網(wǎng)友

使用Javamail發(fā)送郵件,必需的jar包(請下載javamail的源文件,官方下載頁:http://www.oracle.com/technetwork/java/javamail/index-138643.html):
mailapi.jar。定義了收發(fā)郵件所使用到的接口API;
smtp.jar。包含了發(fā)送郵件使用到的類;
pop3.jar。包含了收郵件使用到的類;
我們通常發(fā)送郵件使用的協(xié)議是smtp協(xié)議,接受郵件使用的協(xié)議是pop3協(xié)議。或者,我們直接將mail.jar加入到工程,這個(gè)jar包里邊包含了java收發(fā)郵件所有的接口和類。
 
常用的類:

  •      javax.mail.Session;                                                    -------->保存連接服務(wù)器所需要的信息;
  •      javax.mail.Message;                                                  -------->郵件體,保存郵件的內(nèi)容;
  •      javax.mail.Transport;                                                 -------->發(fā)送郵件的載體
  •      javax.mail.internet.InternetAddress;                         -------->郵件的地址信息

發(fā)送郵件

下邊,我先列出使用Java發(fā)送郵件的最簡單的一個(gè)小測試示例:

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.InternetAddress; import javax.mail.internet.MimeMessage;  /**  *  * QQ(mail.qq.com):POP3服務(wù)器(端口995)SMTP服務(wù)器(端口465或587)。  *  */ public class Demo1 {    /**    * @param args    * @throws MessagingException    */   public static void main(String[] args) throws MessagingException {          String sendUserName = "wangxiangpan@126.com";     String sendPassword = "pwd";          Properties properties = new Properties();     properties.setProperty("mail.smtp.auth", "true");//服務(wù)器需要認(rèn)證     properties.setProperty("mail.transport.protocol", "smtp");//聲明發(fā)送郵件使用的端口          Session session = Session.getInstance(properties);     session.setDebug(true);//同意在當(dāng)前線程的控制臺打印與服務(wù)器對話信息          Message message = new MimeMessage(session);//構(gòu)建發(fā)送的信息     message.setText("你好,我是Champion.Wong!");//信息內(nèi)容     message.setFrom(new InternetAddress("wangxiangpan@126.com"));//發(fā)件人          Transport transport = session.getTransport();     transport.connect("smtp.126.com", 25, sendUserName, sendPassword);//連接發(fā)件人使用發(fā)件的服務(wù)器     transport.sendMessage(message, new Address[]{new InternetAddress("492134880@qq.com")});//接受郵件     transport.close();   }  } 

一般的,我們使用Authenticator把用戶名和密碼封裝起來,不透明!所以:

import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.AddressException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage;  import junit.framework.TestCase;  /**  * javamail 發(fā)送郵件  * @author Champion Wong  * Message.addRecipient(Message.Recipient recipient, Address address); 發(fā)郵件的時(shí)候指定收件人和收件人的角色  * Message.RecipientType.TO 收件人  * Message.RecipientType.CC 抄送,即發(fā)郵件的時(shí)候順便給另一個(gè)人抄一份,不用回復(fù)!但是,上邊的收件人可以看到你都抄送給了誰  * Message.RecipientType.BCC 暗送,也是發(fā)郵件的時(shí)候順便給另一個(gè)人暗發(fā)一份,但是,不同于上邊的是,收件人不能看到你都暗送給了誰  *  */ public class Demo2 extends TestCase {    private static final String sendUserName = "wangxiangpan@126.com";// 發(fā)送郵件需要連接的服務(wù)器的用戶名    private static final String sendPassword = "pwd";// 發(fā)送郵件需要連接的服務(wù)器的密碼    private static final String sendProtocol = "smtp";// 發(fā)送郵件使用的端口    private static final String sendHostAddress = "smtp.126.com";// 發(fā)送郵件使用的服務(wù)器的地址    public void test() throws AddressException, MessagingException {      Properties properties = new Properties();     properties.setProperty("mail.smtp.auth", "true");// 服務(wù)器需要認(rèn)證     properties.setProperty("mail.transport.protocol", sendProtocol);// 聲明發(fā)送郵件使用的端口     properties.setProperty("mail.host", sendHostAddress);// 發(fā)送郵件的服務(wù)器地址      Session session = Session.getInstance(properties, new Authenticator() {       protected PasswordAuthentication getPasswordAuthentication() {         return new PasswordAuthentication(sendUserName, sendPassword);       }     });     session.setDebug(true);//在后臺打印發(fā)送郵件的實(shí)時(shí)信息      Message message = new MimeMessage(session);     message.setFrom(new InternetAddress("wangxiangpan@126.com"));     message.setSubject("Demo2JavaCode發(fā)送郵件測試,采用Authenticator");// 設(shè)置主題     message.setRecipients(Message.RecipientType.TO, InternetAddress         .parse("492134880@qq.com,wangxiangpan@126.com"));// 發(fā)送     message.setRecipients(Message.RecipientType.CC, InternetAddress         .parse("msn_wangxiangpan@hotmail.com"));// 抄送     message         .setContent(             "<span style="font-size:20px; color:#FFCCFF" mce_style="font-size:20px; color:#FFCCFF">如果您看到,證明測試成功了!</span>",             "text/html;charset=gbk");      Transport.send(message);//發(fā)送郵件   } } 

我們發(fā)送一個(gè)比較復(fù)雜的郵件,包括附件,圖文:

import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties;  import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.Message.RecipientType; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility;  /**  *  * @author Administrator Mr XP.Wang  * MimeMultipart 一般電子郵件的容器是Multipart,定義了增加及刪除電子郵件各部分內(nèi)容的方法,  *        但是其是抽象類,需要其子類MimeMultipart來時(shí)用MimeMessage對象  * MimeBodyPart 是BodyPart具體用于mimeMessage的一個(gè)子類,MimeBodyPart對象代表一個(gè)  *       mimeMultipart對象的每一個(gè)部分  * MimeUtility.encodeText(String cn)用于解決郵件中的頭部信息中中文的亂碼問題  *  */ public class Demo3_test {    public static void main(String[] args) throws Exception {          Properties properties = new Properties();     properties.setProperty("mail.smtp.auth", "true");// 服務(wù)器需要認(rèn)證     properties.setProperty("mail.transport.protocol", "smtp");// 聲明發(fā)送郵件使用的端口     properties.setProperty("mail.host", "smtp.126.com");// 發(fā)送郵件的服務(wù)器地址          Session session = Session.getInstance(properties, new Authenticator() {       String sendUserName = "wangxiangpan@126.com";       String sendPassword = "pwd";       protected PasswordAuthentication getPasswordAuthentication() {         return new PasswordAuthentication(sendUserName,             sendPassword);       }     });     session.setDebug(true);          MimeMessage msg = new MimeMessage(session);// 聲明一個(gè)郵件體     msg.setFrom(new InternetAddress("/""+MimeUtility.encodeText("Mr XP.Wang")+"/"<wangxiangpan@126.com>"));     msg.setSubject("這是我的第一份復(fù)雜郵件");//設(shè)置郵件主題     msg.setRecipients(MimeMessage.RecipientType.TO, InternetAddress.parse(MimeUtility.encodeText("王翔攀")+"<wangxiangpan@126.com>,"+MimeUtility.encodeText("三毛")+"<492134880@qq.com>"));      MimeMultipart msgMultipart = new MimeMultipart("mixed");// 標(biāo)明郵件的組合關(guān)系,混合的關(guān)系     msg.setContent(msgMultipart);// 設(shè)置郵件體           MimeBodyPart attch1 = new MimeBodyPart();// 附件1     MimeBodyPart attch2 = new MimeBodyPart();// 附件2     MimeBodyPart content = new MimeBodyPart();// 郵件的正文,混合體(圖片+文字)      // 將附件和正文設(shè)置到這個(gè)郵件體中     msgMultipart.addBodyPart(attch1);     msgMultipart.addBodyPart(attch2);     msgMultipart.addBodyPart(content);           // 設(shè)置第一個(gè)附件     DataSource ds1 = new FileDataSource("F:/ACCP5.0/文件/ssh配置.txt");// 指定附件的數(shù)據(jù)源     DataHandler dh1 = new DataHandler(ds1);// 附件的信息     attch1.setDataHandler(dh1);// 指定附件     attch1.setFileName("ssh.txt");      // 設(shè)置第二個(gè)附件     DataSource ds2 = new FileDataSource("resource/48.jpg");// 指定附件的數(shù)據(jù)源     DataHandler dh2 = new DataHandler(ds2);// 附件的信息     attch2.setDataHandler(dh2);// 指定附件     attch2.setFileName("48.jpg");      //設(shè)置郵件的正文     MimeMultipart bodyMultipart = new MimeMultipart("related");//依賴關(guān)系     content.setContent(bodyMultipart);//指定正文     MimeBodyPart htmlPart = new MimeBodyPart();     MimeBodyPart gifPart = new MimeBodyPart();     bodyMultipart.addBodyPart(htmlPart);     bodyMultipart.addBodyPart(gifPart);               DataSource gifds = new FileDataSource("resource/48.jpg");//正文的圖片     DataHandler gifdh = new DataHandler(gifds);     gifPart.setHeader("Content-Location", "http://mimg.126.net/logo/126logo.gif");     gifPart.setDataHandler(gifdh);//設(shè)置正文的圖片          htmlPart.setContent("我只是來打醬油的,這是我的形象照!<img src="/" mce_src="/""http://mimg.126.net/logo/126logo.gif/">", "text/html;charset=gbk");//設(shè)置正文文字          msg.saveChanges();//保存郵件          //將郵件保存成文件     OutputStream ops = new FileOutputStream("C:/Users/Administrator/Desktop/test.eml");     msg.writeTo(ops);     ops.close();          Transport.send(msg);              }  } 

收取郵件
示例:Rose 收取最近一封郵件。

import java.util.Date;import java.util.Properties;import javax.mail.Folder;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.NoSuchProviderException;import javax.mail.Session;import javax.mail.Store;public class FetchMail {  public static void main(String[] args) {    String protocol = "pop3";    boolean isSSL = true;    String host = "pop.163.com";    int port = 995;    String username = "rose@163.com";    String password = "rose";    Properties props = new Properties();    props.put("mail.pop3.ssl.enable", isSSL);    props.put("mail.pop3.host", host);    props.put("mail.pop3.port", port);    Session session = Session.getDefaultInstance(props);    Store store = null;    Folder folder = null;    try {      store = session.getStore(protocol);      store.connect(username, password);      folder = store.getFolder("INBOX");      folder.open(Folder.READ_ONLY);      int size = folder.getMessageCount();      Message message = folder.getMessage(size);      String from = message.getFrom()[0].toString();      String subject = message.getSubject();      Date date = message.getSentDate();      System.out.println("From: " + from);      System.out.println("Subject: " + subject);      System.out.println("Date: " + date);    } catch (NoSuchProviderException e) {      e.printStackTrace();    } catch (MessagingException e) {      e.printStackTrace();    } finally {      try {        if (folder != null) {          folder.close(false);        }        if (store != null) {          store.close();        }      } catch (MessagingException e) {        e.printStackTrace();      }    }    System.out.println("接收完畢!");  }}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 邯郸县| 泰州市| 南通市| 观塘区| 梅河口市| 任丘市| 铜陵市| 额济纳旗| 泽库县| 万州区| 闻喜县| 北流市| 通化市| 个旧市| 景宁| 阿拉善右旗| 昔阳县| 东乡族自治县| 靖西县| 无棣县| 绍兴市| 合作市| 应城市| 长兴县| 嘉义县| 娄底市| 托克托县| 察雅县| 改则县| 漳州市| 珠海市| 江门市| 利辛县| 怀化市| 乐山市| 南皮县| 平阳县| 天水市| 桂林市| 布拖县| 隆林|